Task和Activity回退栈详解

来源:互联网 发布:软件开发包括哪些 编辑:程序博客网 时间:2024/05/22 11:13

  什么是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所设置的效果。

0 0
原创粉丝点击