详谈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。
- 详谈android启动模式
- Android.mk 详谈
- android中style详谈
- Android坐标详谈
- Android杂谈--闹钟详谈
- Android 设计模式实战之关于封装计费代码库的策略模式详谈
- android Activity启动模式
- Android Activity启动模式
- android 启动模式
- Android 启动模式
- android中四种启动模式
- android ics 启动模式
- android启动模式
- android启动模式
- Android启动模式分析
- Android Activity启动模式
- android 启动模式(二)
- android 启动模式
- 工厂模式(二)--工厂方法模式
- JAVA中的GC机制
- sed-非交互式流编辑器详解
- redis事务管理
- opencv1.0
- 详谈android启动模式
- 加/解密系列(二)-前端加密md5实现--CryptoJS v3.1.2+
- 线程池系列一:线程池作用及Executors方法讲解
- rsync 的简单使用
- PHP命名空间(Namespace)的使用详解
- 线程与进程的关系
- aapt 快速分析apk工具aapt的使用
- mysql 1449 : The user specified as a definer ('root'@'%') does not exist 解决方法
- WebApplicationContext类的作用