Activity的存储结构分为三层

一,启动模式分类:

Standard(标准模式,默认)
SingleTop(栈顶复用模式)
SingleTask(栈内复用模式)
SingleInstance(单实例模式)
通过AndroidManifest可配置Activity的LaunchMode.如果没有配置,默认是Standard模式。

taskAffinity属性,可设置Activity的栈。默认是当前包名。此属性仅适用于后三种启动模式。

二,ADB命令

我们通过ADB的命令,就可以直观的看到当前系统内Activity的栈结构。

具体命令如下:

从Display #0 (activitys from top to bottom)下面我们能够看出有两个Stack栈。从字面意思我们也可以看出从上到下是有两个栈的,其中栈顶的Stack #1从包名就能看出里,是我测试用的栈。

而Stack #0能看出来是从桌面图标启动,所以可以认为是系统桌面Activity的栈。

从上面我们可以看出来Activity的存储结构分为三层:

栈(Stack),栈中可以有多个任务记录,这个栈我们可以认为是一个进程的栈,以包名来区分吧。
任务记录(TaskRecord),也是栈结构,后进先出。任务记录里面有多个ActivityRecord
Activity记录(ActivityRecord),我们可以理解为就是一个Activity
三,Standrd模式(标准启动模式)

标准启动模式就是没有特殊配置的Activity。该启动模式下会一直创建Activity并将该Activity压入TaskRecord中。

示例:
MainActivity下有两个按钮,一个用来调起他自己。一个用来调起TestAActivity。都是Standrd模式。
adb记录如下

我们连续三次调用MainActivity,然后在调用TestAActivity。我们发现MainActivity不停的被创建,然后被压入一个TaskRecord。
该TaskRecord有一个标识 #610 A=org.wangchenlong.wcl_activity_launchmode_demo。
从记录中我们就能发现Standrd模式的特点就是会一直创建Activity.并且将它压入启动他的Activity所在的TaskRecord中。

四,SingleTop(栈顶复用模式)

解释:只有当Activity位于栈(TaskRecord)顶的时候,再次启动当前的Activity,复用栈顶的Activity实例。不会重复创建。如果位于栈(TaskRecord)内(中间位置),则与标准模式相同,仍然会重新创建实例。

示例:
MainActivity -> TestAActivity -> TestBActivity -> TestBActivity -> TestBActivity。其中TestBActivity是SingleTop模式。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值