android Activity的任务管理

纯属无聊,翻译官网文档关于activity任务管理一块。

一个应用程序可以拥有多个activty,而一个任务(task)可以理解为:一个为了完成特定的事情的activty的集合。


任务中的activty是通过 “back stack” 后进先出的栈来管理的,你可以理解为一个任务对应一个“back stack”。当我们按下返回键的时候,“back stack”的处理过程是这样子的:


但是问题来了,如果我在Activty3,我想跳过activty2来启动activty1呢?因为“back stack”是不能改变activty的顺序的,那就只能重新实例化activty1了?


对于这个问题,我们先来看下android的activty的启动方式:

1.新启动的activty隶属于一个新的task;

2.如果原来的栈中存在目标activty,找到它并将它恢复到foreground;

     3.当用户长时间没有对这个task做交互,清空任务中“back stack”中root activty以上的所有activty。(相当于目标Activty为root activty)。

定义activty启动方式,你可以在mainifest的<activity>标签里配置以下属性:

android:taskAffinity 定义activty归属于哪个task

android:launchMode 启动模式:

"standard"  ,"singleTop" ,"singleTask" ,"singleInstance"

 启动模式可以很好的回答上面的问题。

 

android:allowTaskReparenting 如果设置为true,那么这个activty从启动到销毁,都只能和一开始关联的task关联,不允许改变task。

android:clearTaskOnLaunch 比如,如果设置activtyA的这个属性为true,那么我们启动activtyA,接着启动activtyB,然后按下home键,让task居于background。再从home启动程序,那么回到的是activtyA,而不是activtyB。

   

android:alwaysRetainTaskState 这个属性只针对于root activty。若设置为true,当下次进入task启动该activty时,会保存上一次的状态。activty中包含webView的场景比较适用,上一次退出时的多tab的状态一般是用户不愿意丢失的。

 

android:finishOnTaskLaunch 下次从home进入task的时候,activty将被销毁。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值