注:文章都是通过阅读各位前辈总结的资料、Android 11 Rockchip平台源码、加上自己的思考分析总结出来的,其中难免有理解不对的地方,欢迎大家批评指正。文章为个人学习、研究、欣赏之用,图文内容整理自互联网,如有侵权,请联系删除(◕‿◕),转载请注明出处(©Rockchip ©Android @Linux 版权所有),谢谢。
(==文章基于 Android 11.0==)
正是由于前人的分析和总结,帮助我节约了大量的时间和精力,特别感谢,由于不喜欢图片水印,去除了水印,敬请谅解!!!
==源码(部分)==:
xxx
==源码(部分)==:
我们这里分析以Launcher为实例。
(一)、FallbackHome到Launcher
(1)、FallbackHome到Launcher
系统开机首先启动FallbackHome,FallbackHome其实是一个优先级更高的Luancher,然后其实没做什么事情,后面就finish了。
FallbackHome生命周期走finish后,系统会去resume 下一个top activity。此时系统没有其他Activity启动。就会回到桌面。
通过PackageManager().resolveIntent()寻找合适的launcher(存在多launcher)的ActivityInfo。
寻找Home ActivityInfo。
这里找到了Launcher包名(com.chinatsp.launcher)。
(2)、ActivityStartController().startHomeActivity()
这里就开始启动Launcher之旅了。
1 | 01-01 08:00:14.976 879 1846 I ActivityStarter: START u10 {act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.chinatsp.launcher/.view.Launcher} from uid 0 |
(3)、ActivityStarter.startHomeActivity()
看看堆栈信息。
系统会首先为Luancher创建一个ActivityRecord。这个时候framework里面的生命周期从from:null to:INITIALIZING。
1 | 01-01 08:00:14.978 879 1846 V ActivityRecord_States: State movement: ActivityRecord{1d62093 u10 com.chinatsp.launcher/.view.Launcher from:null to:INITIALIZING reason:ActivityRecord ctor |
(4)、ActivityStarter.startActivityUnchecked()
看看堆栈先:
startActivityInner()首先会去寻找是否存在可以重复使用的Task(AMS的Task),我们这里Launcher第一次启动会新建Task。
(5)、ActivityStarter.getReusableTask()
未找到可Reuse的Task。
(6)、ActivityStarter.getLaunchStack()
getLaunchStack会为Luancher创建ActivityStack(如果不存在的话)。
这里创建好了ActivityStack,但不是对于Launcher的。
(7)、ActivityStarter.setNewTask()
ActivityStack extends Task ,ActivityStack 继承于Task ,new ActivityStack会走Task初始化方法。
这里Task也创建好了。看看堆栈。
(8)、ActivityStack.startActivityLocked()
(二)、Launcher进程创建
(1)、ActivityTaskManagerService.startProcessAsync()
进程创建好,首先会回调ActivityThread.main()方法(具体如何回调这里不做分析)。
(2)、ActivityThread.main()
Binder通信进入System_Sever进程。
(3)、AMS.attachApplicationLocked()
前面都是创建进程和一系列资源绑定。
1 | 10-11 14:20:26.699 2692 2692 V ActivityThread: <<< done: BIND_APPLICATION |
(三)、Launcher生命周期
(1)、ActivityStackSupervisor.realStartActivityLocked()
(2)、ActivityThread.handleLaunchActivity()
这里生命周期会从onCreate() 到 onResume()
(3)、ActivityThread.performLaunchActivity()
(4)、Activity.attach()
(5)、Activity.performCreate()
(6)、Activity.onCreate()
(7)、Activity.handleStartActivity()
(8)、Activity.performStart()
(9)、Activity.onStart()
(10)、ActivityThread.handleResumeActivity()
(11)、Activity.performResume()
(12)、Activity.onResume()
(13)、ActivityThread.handleTopResumedActivityChanged()
当启动其他进程Activity时,收降Luancher pause;