🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 应用启动 ![](https://img.kancloud.cn/42/70/427048d32a720ee877ee4719d8d6c133_908x858.png) ![](https://img.kancloud.cn/ec/d9/ecd945f050540487f48fdea5087b5d84_960x720.png) ![](https://img.kancloud.cn/d2/6a/d26ae9b6124979a0a418d366a272d847_1817x1750.png) ## 问题 ### ActivityThread 是什么,它是一个线程吗,如何被启动的? 它不是一个线程,它是运行在 App 进程中的主线程中的一个方法中。当 App 进程创建时会执行 ActivityThread.main(),ActivityThread.main() 首先会创建 Looper 执行 Looper.prepareMainLooper();然后创建 ActivityThread 并调用 ActivityThread.attach() 方法告诉 ActivityManagerService 我们创建了一个应用 并将 ApplicationThread 传给 ActivityManagerService;最后调用 Looper.loop()。 ### ActivityClientRecord 与 ActivityRecord 是什么? 记录 Activity 相关信息,比如:Window,configuration,ActivityInfo 等。 ActivityClientRecord 是客户端的,ActivityRecord 是 ActivityManagerService 服务端的。 ### Context 是什么,ContextImpl,ContextWapper 是什么? Context 定义了 App 进程的相关环境,Context 是一个接口,ContextImpl 是子类,ContextWapper 是具体实现。 应用资源是在 Application 初始化的时候,也就是创建 Application,ContextImpl 的时候,ContextImpl 就包含这个路径,主要就是对就是 ResourcesManager 这个单例的引用。 可以看出每次创建 Application 和 Acitvity 以及 Service 时就会有一个 ContextImpl 实例,ContentProvider 和B roadcastReceiver 的 Context 是其他地方传入的。 所以 Context 数量 = Application 数量 + Activity 数量 + Service 数量,单进程情况下 Application 数量就是 1。 ### Instrumentation 是什么? 管理着组件Application,Activity,Service等的创建,生命周期调用。 Application 是什么,什么时候创建的,每个应用程序有几个 Application? Application 是在 ActivityThread.handleBindApplication() 中创建的,一个进程只会创建一个 Application,但是一个应用如果有多个进程就会创建多个 Application 对象。 ### 点击 Launcher 启动 Activity 和应用内部启动 Activity 的区别? 点击 Launcher 时会创建一个新进程来开启 Activity,而应用内打开 Activity,如果 Activity 不指定新进程,将在原来进程打开,是否开启新进程实在 ActivityManagerService 进行控制的,上面分析得到,每次开启新进程时会保存进程信息,默认为 应用包名 + 应用UID,打开 Activity 时会检查请求方的信息来判断是否需要新开进程。Launcher 打开 Activity 默认 ACTIVITY_NEW_TASK,新开一个 Activity 栈来保存 Activity 的信息。 Activity 启动过程,onCreate(),onResume() 回调时机及具体作用? Activity.onCreate() 完成了 App 进程,Application,Activity 的创建,调用 setContentView() 给 Activity 设置了 layout 布局。 Activity.onResume() 完成了 Activity 中 Window 与 WindowManager 的关联,并对所有子 View 进行渲染并显示。 ## 参考资料 [https://www.jianshu.com/p/9ecea420eb52](https://www.jianshu.com/p/9ecea420eb52)