Activity的启动过程,要说清楚需要用一篇文章来描述,当时在面试过程中问到这个问题需要用简洁的语言来说明:
我们可以从Context.startActivity来说起,实际上是ContextImpl.startActivity来实现的,然后内部会通过Instrumentation来尝试启动Activity,这是一个跨进程过程,它会调用AMS的startActivity方法,当AMS校验完Activity的合法性后,会通过ApplicationThread回调到我们的进程,这也是一次跨进程过程,而ApplicationThread就是一个Binder。回调逻辑是在Binder线程池中完成,所以需要通过Handler H 将其切回UI线程,第一个消息是LAUNCH_ACTIVITY,它对应着handleLaunchActivity,在这个方法里面完成Activity的创建和启动。接着,在Activity的onResume中,Activity的内容将开始渲染到Window上面,然后开始绘制直到我们可以看见。
网友评论