什么是Task?
Task是一个包含activity的列表。或者可以理解为按照启动的先后来排队的一个队列;
什么是回退栈(Back Stack)?
Back Stack是存储一个Task的实现方式,一个容器。它具有栈的特性:后进先出。
Task 、Back Stack 、Acitivity三者之间的关系?
根据activity的启动的顺序,加入A启动了B,那么B默认情况下就放到了
A的Task的Back Stack里面啦。当然,你也可以去修改这一个默认的行为。
如何保存activity属性和状态?
默认情况下,当activity脱离前台进入后台运行的时候,系统会自动保存它的配置信息,当用
户返回到activity的时候,可以自动的复原.
然而当过了比较长的一段时间后或者系统需要回收内存什么的,会清除掉它的配置信息,当
用户返回到该activity的时候会重新的启动该activity.
那么这种情况下如果要把以前做的重新再来一遍,这用户体验想想就觉得不妥啊.那么我
们需要自己去保存和恢复activity的配置信息.then ,how?
实现onSaveInstanceState()方法,把所需的属性信息保存到bundle里.
在onCreate()方法里会有一个Bundle参数,如果不为空的话证明了之前是有一些信
信息是保存在这里的,我们就可以利用里面的信息去恢复用户原本处于的状态,这样子用户的体验是不是就好狠多啦。
如何管理Task?
如开头所说,我们可以修改系统的默认行为(即如果A启动了B,会把B放入A所在的Task和Back Stack里),那么,有两种方式可以做到:
A.在startActivity(Intent intent)的intent中定义flag:
intent.setFlags(flag);
系统会根据intent所定义的flag来对所被启动的activity来指定特定的Task。
B.在Manifest文件中该activity标签下的属性
taskAffinity
launchMode
allowTaskReparenting
clearTaskOnLaunch
alwaysRetainTaskState
finishOnTaskLaunch
同样系统会根据属性里所定义的值来对被启动的activity进行指定task。
在这两种方式中,有一些效果是flag有而manifest文件没有的,同样也有一些效果
值是manifest文件有而flag所没有的。
当这两个值被同时设置的时候,flag的效果会覆盖launchMode所设置的效果。