• 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中去。

     
  • 相关阅读:
    cf914D. Bash and a Tough Math Puzzle(线段树)
    RNQOJ [stupid]愚蠢的矿工(树形依赖背包)
    BZOJ4552: [Tjoi2016&Heoi2016]排序(线段树 二分)
    多项式系数学习笔记
    BZOJ4653: [Noi2016]区间(线段树 双指针)
    洛谷P3372 【模板】线段树 1(树状数组)
    BZOJ3261: 最大异或和(可持久化trie树)
    BZOJ4260: Codechef REBXOR (01Tire树)
    Android 关于显示键盘,布局错乱网上顶的问题
    Java 输入流读取文本文件换行符问题
  • 原文地址:https://www.cnblogs.com/mingfeng002/p/11754057.html
Copyright © 2020-2023  润新知