详谈android启动模式

来源:互联网 发布:电梯仿真软件 编辑:程序博客网 时间:2024/05/20 18:16

        绝对原创:转载请说明出处!


android启动模式大家都知道就是四种:standard,singleTop,singleTask,singleInstance。

        这里主要是通过查看dump来描述四种模式的区别和一些注意事项。通过三个activity进行调试MainActivity---->>SubActivity---->>TaskActivity,一下以ABC代替。

        1.standard

  AB都设置为standard启动顺序是A---->>B---->>B。正常启动ABB


        2.singleTop

A设置为standard,B设置为singleTop启动顺序A---->>B---->>B。这时候到B页面再点击启动B的时候直接没反应。

3.singleTask

A设置为standard,B设置为singleTask,C设置为standard启动顺序A---->>B---->>C。

官网上解释说Task会启动一个新的Task,咱们来看看这个解释。


并没有出现新建的task任务。想要出现新建的task任务应该怎么做:

这个时候需要对设置了singleTask的B设置一个新的属性   android:taskAffinity="com.hyh.live.SubActivity"这个属性告诉activity启动的时候要新建立一个task。设置之后启动顺序不变。


我们看到A在一个Task,BC在另外一个Task中,这个时候在B之后启动的activity都会进入到B的task中返回顺序没变。

这里加一句但一个activity被设置为singleTask的时候第一次启动之后再次启动这个activity的话,不会创建新的实力,而是调用原来的activity并执行newIntent方法。

4.singleInstance

A设置为standard,B设置为singleInstance,C设置为standard启动顺序A---->>B---->>C。


看到B自动生成了一个task,这里AC虽然位置不在一起,但是可以看到他们是在同一个task中的,这个时候在C界面返回直接回到了A界面,问题还不止这个


观察返回后剩AB的界面发现task前面的序号发生了变化,A在返回前是0的位置,现在换成C变为0的位置了。这是因为Android在执行Task的时候都是先执行完一个Task里面所有的任务才回去执行另一个Task的任务,这个时候C就会被设置为0。

我们来做另外一个调试A设置为singleInstance,BC设置为standard,启动顺序A---->>B---->>C---->>A。

先看下A---->>B---->>C时候的dump


一切正常,我们再启动A


这个时候A的序号被变成了2,这时候点返回

发现A已经没有了,为什么,应为A所处的Task返回后移除了ATask为空也就没有存在的意义了。

紧跟上面的步骤,在启动A的基础上我们在启动B这时候的顺序是A---->>B---->>C---->>A---->>B


这个尝试瞬间让我凌乱了。我明明启动的是B为什么调到C了,我个人认为无论BC所在Task中有几个Activity都会启动到之前在栈顶的那个页面,这单纯的就是Task之间的转换。这个时候我要点击返回肯定是先执行完BC所在Task,让A处于0位置,最后返回A。

总结,慎用singleInstance。

0 0
原创粉丝点击