首先推荐一篇文章,ActivityManagerService-AMS启动流程-[Android取经之路]。这篇文章是以Android 10.0源码为基础分析的,写的很详细也很棒,我学习AMS的启动就是看着这篇文章学的,在此先感谢作者的分享。
我们都知道,AMS非常重要,关乎着四大组件的启动,同时它也非常非常复杂,如果不是做系统定制开发的想把AMS彻底搞清楚那真的是非常困难的一项巨艰巨的任务。同时,即便是做系统定制开发的人,甚至是Google的开发者也不一定能完全搞清楚。因此,在学习这种系统核心服务的时候,我建议我们只需要把它的流程搞清楚就可以了,至于那些细节真的没必要。
据此,我自己学习之后(花了好长时间才把上面推荐的文章看完),我自己画了一个启动的时序图,主要方便自己复习,现在分享出来,与诸位共勉。
从SystemServer.java到AMS.onStart方法
1. SystemServer.java startBootstrapServices方法中调用 ActivityManagerService.Lifecycle.startService(mSystemServiceManager, atm);
2. ActivityManagerService.java 中的 Lifecycle中的startService方法,
3. 之后调用SystemServiceManager.java 中的startService方法
4. SystemServiceManager.java 中经过一些startService 方法的调用,最终会执行到service.onStart(); 而此时的service就是ActivityManagerService所以流程就来到了onStart方法
5. onStart方法中调用了mService.start()