解释activity栈、activity的加载模式

activity栈:

      activity栈是一个先进先出、包含所有正在运行的activity的队列。一个activity的状态,对于开发者来说是无法控制的,是由系统决定的。那么activity是按照什么逻辑来运作的呢,这就要了解activity栈了,每个activity的状态都是由它在activity栈中的位置决定。

     当一个新的activity启动,当前这个activity就会移到这个栈的顶部。如果这个activity结束或者是用户按了反回按钮,那么上一个activity就会移动到顶部变为活动activity。

activity的加载模式:

      在android的多个activity开发中,activity之间的跳转可能需要多种方式,是生成一个新的activity实例还是,直接跳转到以前的activity实例?activity的加载模式就是解决这样的问题的。来决定跳转到哪一个activity实例。

 activity加载模式有四个加载模式:

      standard:标准模式(默认的),一个activity一调用startActivity(),就会产生一个新的实例。

      singleTop:如果activity栈的顶部已经有了就不会产生新的实例,否则会产生一个新的实例。

      singleTask:在新的任务中产生这个实例,以后调用都会使用这个(在同一个任务中),不会产生新的任务。

      singleInstance:跟singleTask模式基本一样,但是有个区别,那就是在这个模式下的activity实例所处的任务中,不能有其他的实例,只有这个activity的实例。

   这四个模式的差异主要分为3点:

1,对intent做出响应的activity会在哪个任务中?对于standart和singleTop模式,该activity是在产生intent(调用startActivity())的任务中,如果这个intent对象包含了

      FLAG_ACTIVITY_NEW_TASK标记,则会是另外一个任务;对于singleTask和singleInstance模式,activity总是位于任务的根本,所以只会在同一个任务中,不会在其他任务。

2,activity是否存在多个实例?前两个模式可以有多个实例,也可以在多个任务中,且每个任务有多个实例;后两个模式下,只有一个实例。

3,实例所在的任务中是否有其他的activity?前三个模式下,可以有其他的activity,最后一个模式下,不能有,任务只能有一个activity实例,就是该实例,如果有的话,这个activity就会根据

    自己的加载模式加载到另一个任务中。

 

posted on 2012-07-11 18:03  ssy黑桃a  阅读(296)  评论(0编辑  收藏  举报