android-activity启动模式
来源:互联网 发布:淘宝哪家的男牛仔裤好 编辑:程序博客网 时间:2024/06/05 16:20
activity启动模式有四种,standard,singleInstance,singleTop,singleTask
默认情况就是这个模式,activity会入栈并居于栈顶,每次启动都会新创建一个实例,但这种模式有个很不合理的地方,比如我们在A页面再次启动A,这样也会创建新实例,栈内就会变成两个A的实例。。
singleTop
这种模式下比默认的要合理一些,当我们要启动的activity已经位于栈顶时再启动它就不会创建实例,而是用我们栈顶已经有的activity,否则将新建实例,例如栈内最下面是A,A上面是B,当我们此时启动B时是不会创建新实例的,因为B已经在栈顶了,如果这时启动A的话A会创建实例,栈内就会变成ABA了。
singleTask
首先说明一点,activity入哪个栈是和调用者有关的,默认情况下是和调用者同栈
此模式下先查找需要的栈是否存在,不存在会创建该栈并创建activity,若该栈存在会在栈内查找是否已经存在将要启动的activity实例,若有则将其上面的所有activity出栈,这样使该activity置于栈顶,不会新建实例,若没找到则会新建实例
singleInstance这种模式每个activity都会新建一个单独的栈,我们可以用getTaskId来追踪,这种模式有效的解决了不同
程序共享实例,两个程序各有自己栈的情况下想用对方的activity入栈,正常入栈必然会新建实例,现在
都用同一个栈了,则实例也就能共用了。singleInstance属于singleTask的一种特殊形式,它有singleTask的属性,只是每次要检测当前要启动的activity是否存在,不存在就建一个新栈压入activity。
这里说一下这个多栈的情况,我们的栈也是分前台和后台的,我们的activity需要放到什么栈是可以控制的,activity的TaskAffinity属性可以设置栈名,但这个名必须是类似包名的形式,而且不能为当前应用的包名,因为默认栈就是当前应用包名的,所以看不到效果,一般只有在singleTask模式才会去设置这些东西。
启动模式不仅可以在配置文件中用launchMode设置,也可以在代码中设置,intent有addFlags方法,像singleTask就可以在代码中设置intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK);但是这两种方式有些区别,在代码中设置优先级会高些,而且可以和其他的标示一起设置,如clearTop,但singleInstance模式必须要在配置文件中设置
- android Activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- android activity 启动模式
- Android - Activity - 启动模式
- android Activity启动模式
- Android Activity启动模式
- 【Android】Activity启动模式
- android activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- Android Activity启动模式
- Android Activity 启动模式
- android - Activity启动模式
- Android:Activity:启动模式
- android-activity启动模式
- 【Android】Activity启动模式
- Android activity 启动模式
- androidUI-对话框
- 最全的Mac OS X【快捷键组合】汇总
- JAVA多线程-Lock的使用(一)-ReentrantLock与Condition
- MagicalRecord入门教程
- Spark源码阅读环境搭建[Windows版]
- android-activity启动模式
- 权限框架Spring secutity
- CodeVS1907 方格取数3
- Swift实现UIScrollView展示多个UIViewController
- Mybatis
- 代理模式(二):代理模式应用实例(收费商务信息查询系统)
- OA系统
- 1037. Magic Coupon (25)
- 1020. 月饼 (25)