总结--Android四大组件的工作过程(写了一个)
首先几个类说明:
TaskRecord:启动的Activity所在的栈
ProcessRecord:描述一个应用程序进程
ActivityRecord:描述一个Activity,记录一个Activity的所有信息
ServiceRecord:描述一个Service,记录一个Service的所有信息
LoadedAPK:描述已加载的APK文件,可以获取到packageInfo,等信息(清单文件)
1、根Activity的启动过程:
在应用程序进程没有创建的情况下,根Activity启动过程中会涉及到4个进程,分别是Zygote进程、Launcher进程、AMS所在进程(SyetemServer进程)、应用程序进程。它们之间的关系如下图所示
非根Activity启动只涉及到AMS所在进程(SyetemServer进程)、应用程序进程两个进程。
首先Launcher进程向AMS请求创建Activity(点击桌面图标),AMS会判断根Activity所需的应用程序进程是否存在并启动,如果不存在就会请求Zygote进程创建应用程序进程。应用程序进程启动后(先执行Applicition的onCreate方法),AMS会请求创建应用程序进程并启动Activity。
其中步骤2是通过Socket通信,步骤1/4是通过AIDL通信。
特别说明:
ContentProvider :当应用程序没启动时,有第三方应用通过ContentProvider访问共享数据的时候,新的应用程序进程启动的时候会先调用ContentProvider的onCreate方法后调用Application的onCreate方法,别的三个控件都是先调用Application的onCreate方法,后调用自己的onCreate方法。