zoukankan      html  css  js  c++  java
  • Task和backStack(本篇章核心)

     TaskbackStack的认识过程

    1.由demo测试得到的关系图:

     

    1.一个task中可以有多个app的Activity,

    由于一个app可以对应一个或多个process,

    2.所以一个task也可以对应多个process。

    2.由adb shell dumpsys activity测试得到的关系图:

    1.Android将所有的task维护在Main stack中,

    2.每个task由TaskId唯一标识,在Hist中包含了处于同一个task内的Activity,

    3.不同的process(拥有不同的PID)中,可以包含同一个app的不同Activity,

    4.一个package标识一个Application。

    3.通过学习源码得到的关系图: 

    1.在ActivityManagerService中,由一个ActivityStack对象维护回退栈,而具体到ActivityStack中,由mHistory来维护回退栈(是一个ArrayList,而非Stack)。

    2.每个Task即为一个TaskRecord对象,

    3.TaskRecord没有为每个Task维护一个自己的stack或list,

    4.mHistory中,不是直接管理Activity,而是维护ActivityRecord对象,

    5.ActivityRecord对象通过TaskRecord与自己所属的Task关联起来,

    6.ActivityRecord对象通过Activity info对象与对应的Activity关联起来,

    7.分析ActivityStack中的moveTaskToFrontLocked()等对Task进行操作的代码,得到,同一个task的ActivityRecord在mHistory中是放在一起的(按照先入先出的顺序),当一个task被调到前台时,这个mHistory中,属于同一个task(taskId一致)的ActivityRecord被一起移到mHistory的顶端(在这个ArrayList中,以最后一个元素所在的位置为top,top=size()-1);

  • 相关阅读:
    Linux下解析域名命令-dig 命令使用详解
    重写、覆盖、重载、多态几个概念的区别分析
    介绍python中运算符优先级
    介绍Python中6个序列的内置类型
    Mysql(Mariadb)数据库主从复制
    winscp中使用sudo的方法
    git push跳过用户名和密码认证配置教程
    案例:通过shell脚本实现mysql数据备份与清理
    毕业季,我的Linux求职之路
    PHP和ajax详解
  • 原文地址:https://www.cnblogs.com/hellocwh/p/4637732.html
Copyright © 2011-2022 走看看