SystemServer进程在启动的过程中会启动PackageManagerService,PackageManagerService启动后会将系统中的应用程序安装完成。在此前已经启动的AMS会将Launcher启动起来。
Launcher的入口为AMS的systemReady方法
1
ActivityManagerDebugConfig frameworks/base/services/core/java/com/android/server/am/ActivityManagerDebugConfig.java
这里首先分享一个技巧 可以把这个类里面的这个属性设置为true这样就可以把ActivityManager相关的log打开了
// Enable all debug log categories.
// static final boolean DEBUG_ALL = false;
static final boolean DEBUG_ALL = true;2
startOtherServices() frameworks/base/services/java/com/android/server/SystemServer.java
此处是一个Lambda表达式省略的部分是一个回调方法
mActivityManagerService.systemReady(
                                     ...
                                    )3
systemReady() frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
这里关于EventLog分享一个查看log的链接https://www.jianshu.com/p/1c9106dd8284
android日志主要分为 kernel、radio、event、main
adb logcat -b xxx
130|generic_x86_64:/ # logcat -b events | grep "3040"                          
06-02 00:18:02.017  1541  1556 I am_pss  : [2069,10015,com.android.launcher,31063040,17305600,0]
06-02 00:22:02.033  1541  1556 I am_pss  : [2069,10015,com.android.launcher,31063040,17305600,0]
06-02 04:48:12.311  1541  1556 I am_pss  : [2069,10015,com.android.launcher,32285696,18903040,0]
06-02 09:19:17.510  1541  1556 I am_pss  : [2069,10015,com.android.launcher,33040384,19652608,0]
06-02 17:51:00.018  1541  1556 I am_pss  : [1710,1001,com.android.phone,31703040,20111360,0]
06-02 19:26:00.039  1541  1556 I am_pss  : [2069,10015,com.android.launcher,34850816,21463040,0]public void systemReady(final Runnable goingCallback, TimingsTraceLog traceLog) {
        traceLog.traceBegin("PhaseActivityManagerReady");
        ...
        Slog.i(TAG, "System now ready");
        EventLog.writeEvent(EventLogTags.BOOT_PROGRESS_AMS_READY,
            SystemClock.uptimeMillis());
        ...
}关于工厂模式FactoryTest可参考这篇文章 https://blog.csdn.net/thl789/article/details/8053574 这里是正常模式
...
//判断工厂模式
synchronized(this) {
    // Make sure we have no pre-ready processes sitting around.
    if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL)
...startPersistentApps 只启动加密感知的持久应用程序;一旦用户被解锁,我们将返回并启动不知情的应用程序可参考这篇文章
https://blog.csdn.net/yaobao888/article/details/77824950
https://www.jianshu.com/p/c9e43905e6b6
https://www.jianshu.com/p/3db7809f231e
...
synchronized (this) {
            // Only start up encryption-aware persistent apps; once user is
            // unlocked we'll come back around and start unaware apps
            startPersistentApps(PackageManager.MATCH_DIRECT_BOOT_AWARE);
...启动Launcher
startHomeActivityLocked(currentUserId, "systemReady");4
startHomeActivityLocked() frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
这里介绍来自这篇 https://blog.csdn.net/learnframework?spm=1001.2014.3001.5509
这里看到了startHomeActivityLocked(currentUserId, “systemReady”);被调用,从名字既可以看得出他是要启动Home类型的Activtiy,常见的Launcher就是一种Home类型的Activity,但这里其实并不是Launcher,而是设置中的FallbackHome类型的,它也是一个Home类型的Activity,这里FallbackHome是google新加入的,主要就是因为涉及整个android系统的加密等原因,系统在还没有完全解锁前,不可以启动Launcher,因为Launcher中明显和各个第三方应用耦合较多(比如桌面可能显示着一堆的各个应用的Widget),如果直接Launcher作为FallbackHome启动,相对就会要求Launcher依赖的应用也是支持直接解密类型,那就肯定不现实。所以就先启动了FallbackHome一个什么也不显示的界面来作为启动真正Launcher的一个过度。
boolean startHomeActivityLocked(int userId, String reason) {
        if (mFactoryTest == FactoryTest.FACTORY_TEST_LOW_LEVEL
                && mTopAction == null) {
            // We are running in factory test mode, but unable to find
            // the factory test app, so just sit around displaying the
            // error message and don't try to start anything.
            return false;
        }
        Intent intent = getHomeIntent();
        ...
}5
getHomeIntent() frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
在这个方法中创建了Intent 并将mTopAction、mTopData传入,
String mTopAction = Intent.ACTION_MAIN;
和若是系统运行模式不是低级工厂模式则将Intent的Category设置为Intent.CATEGORY_HOME后返回。

 
                   
                   
                   
                   本文围绕Android系统启动Launcher的流程展开。SystemServer进程启动PackageManagerService完成应用安装,AMS启动Launcher。文中详细介绍了启动过程涉及的多个方法,如systemReady、startHomeActivityLocked等,还提及了日志查看、工厂模式等相关知识,以及系统未解锁前先启动FallbackHome作为过渡。
本文围绕Android系统启动Launcher的流程展开。SystemServer进程启动PackageManagerService完成应用安装,AMS启动Launcher。文中详细介绍了启动过程涉及的多个方法,如systemReady、startHomeActivityLocked等,还提及了日志查看、工厂模式等相关知识,以及系统未解锁前先启动FallbackHome作为过渡。
           最低0.47元/天 解锁文章
最低0.47元/天 解锁文章
                           
                       
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1416
					1416
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            