Activity启动场景Task分析(二)

场景分析

下面通过启动Activity的代码来分析一下:

1.桌面

首先,我们看下处于桌面时的状态,运行命令:

adb shell dumpsys activity

结果如下

ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
Display #0 (activities from top to bottom):
  Stack #0:
  
  //中间省略其他...
  
    Task id #102
    
  //中间省略其他...
  
      TaskRecord{446ae9e #102 I=com.google.android.apps.nexuslauncher/.NexusLauncherActivity U=0 StackId=0 sz=1}
      Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.google.android.apps.nexuslauncher/.NexusLauncherActivity }
        Hist #0: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102}
          Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000100 cmp=com.google.android.apps.nexuslauncher/.NexusLauncherActivity }
          ProcessRecord{19c7c43 2203:com.google.android.apps.nexuslauncher/u0a22}

    Running activities (most recent first):
      TaskRecord{446ae9e #102 I=com.google.android.apps.nexuslauncher/.NexusLauncherActivity U=0 StackId=0 sz=1}
        Run #0: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102}

    mResumedActivity: ActivityRecord{54fa22 u0 com.google.android.apps.nexuslauncher/.NexusLauncherActivity t102}
    
//省略其他

实际上就是如下图所示的结构,这里的Stack #0就是ActivityStackSupervisor中的mHomeStackmHomeStack管理的是Launcher相关的任务。

 

 

从桌面启动一个Activity

从桌面启动一个APP,然后运行上面的命令,为了节省篇幅,这里和后面就不贴结果了,直接放图了

从桌面点击图标启动一个AActivity,可以看到,会多了一个Stack #1,这个Stack #1就是ActivityStackSupervisor中的mFocusedStack,mFocusedStack负责管理的是非Launcher相关的任务。同时也会创建一个新的ActivityRecord和TaskRecord,ActivityRecord放到TaskRecord中,TaskRecord则放进mFocusedStack中。

默认模式从A启动B

然后,我们从AActivity中启动一个BActivity,可以看到会创建一个新的ActivityRecord然后放到已有的TaskRecord栈顶。

 

从A启动B创建新栈

如果我们想启动的BActivity在一个新的栈中呢,我们可以用singleInstance的方式来启动BActivity。singleInstance后面也会讲到。这种方式会创建一个新的ActivityRecord和TaskRecord,把ActivityRecord放到新的TaskRecord中去。

 

 

 

 

 

 
posted on 2019-10-28 18:12  mingfeng002  阅读(582)  评论(0编辑  收藏  举报