Application的创建,Task的创建,以及activity的启动

Application的启动

1 launcher 的应用图标被点击。
2 调用Instrumentation.execStartActivity(this,mMainThread.getApplicationThread(), …) 创建ApplicationThread并调用ActivityManager.getService() .startActivity。
3 ActivityManager.getService() .startActivity(ApplicationThread,…)使用ApplicationThread开启。
4 ActivityManager.getService()使用ServiceManager.getService获取实例,如下:
final IBinder b=ServiceManager.getService(Context.ACTIVITY_SERVICE);
//2. aidl 获取AMS
final IActivityManager am = IActivityManager.Stub.asInterface(b);

5 进入第3步的startActivity方法,一连串调用之后,创建了ActivityStack。
6 然后调用ActivityStack的resumeTopActivityInnerLocked。
7 然后调用ams的startProcessLocked。
8 然后调用startViaZygote方法。
9 然后调用zygoteSendArgsAndGetResult,zygote使用参数fork子进程。

Task的创建

Task是栈,先进后出,每个应用都有一个对应的Task,用来存放Activity

Activity的启动和声明周期的管理

启动方式

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容