framework activitymanager 相关概念

ActivityStack:  实现对ActivityRecord 的管理,对ActivityRecord的管理,实际上就是对Activity的管理。

所有对ActivityRecord的调度操作都在ActivityStack里进行。其实Android里所谓的“Activity堆栈,并不是真正的一个堆栈结构,而是一个ArrayList列表,在这个列表里记录了所有的ActivityRecordActivityStack所做的事情就是保证列表的第一个ActivityRecord(也就是栈顶)处于运行状态,并且排在列表后面的ActivityRecord的运行状态受到栈顶”ActivityRecord的影响。

 

 

ActivityRecord代表了一个Client端的Activity,记录了Activity的各种属性和管理状态。其中有介个关键的成员变量:

IApplicationToken.StubappToken

appToken作为此ActivityRecord的唯一标识,贯穿了AMSActivityWMS

TaskRecord

task标识了此ActivityRecord所属的Task。在ActivityStackActivityRecord的位置调整中,更多的是以TaskRecord为单位进行的。如moveTaskToFront()moveTaskToBack()等接口,会同时移动属于同一个Task的所有activity TaskRecordActivityRecord是一对多的关系,多个ActivityRecord可能指向同一个TaskRecord

ProcessRecordapp

app标识了Client端的Activity所在的进程。同样的,ProcessRecordActivityRecord是一对多的关系,多个ActivityRecord可能指向同一个ProcessRecord。通过访问ProcessRecord中的IApplicationThread可以直接操作Client端的ActivityThread

TaskRecord记录了taskid、名称等属性。

我们知道,Activity的管理是以Task为单位来进行的,多个行为类似的Activity会被归类到同一个Task中。一般来说,一个apk中的所有Activity都是属于同一个Task,并且Taskapk的包名来命名。但开发者可以在AndroidManifset.xml中通过android:taskAffinity属性给每个Activity配置不同的Task。而什么时候会新开一个Task,新开Task的名字等由ActivityStack里面的逻辑来判断,具体取决于AndroidManifest.xml中的配置和调用startActivity()时传递的flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值