纯属无聊,翻译官网文档关于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将被销毁。