Android下的Activity的四种启动模式
2016-03-21 16:20
197 查看
一:Standard的启动模式
Standard是默认的模式每开始一个activity,就会在栈中加一个activity,相同的也会加,所以加多少个,就要按多少次返回键才能回到最初的界面
二:singleTop的启动模式
1.清单配置:
<activityandroid:name="com.itcode.taskstack.SecondActivity"
android:label="@string/_second"
android:launchMode="singleTop">
</activity>
Singletop:如果任务栈的栈顶已经存在这个activity的实例,
不会创建新的activity,而是利用旧的activity实例
调用 旧的activity的onNewIntent()方法
2.作用:
避免一个糟糕的用户体验,如果这个界面已经被打开且在任务栈的栈顶,就不会重复开启了
三:Singletask的启动模式:
1.Androidfest配置:
<activityandroid:name="com.itcode.taskstack.SecondActivity"
android:label="@string/_second"
android:launchMode="singleTask">
</activity>
2.作用:
singletask的启动模式:在任务栈里面只允许一个实例存在,假如02是singletask,栈里是:01 02 01 03 若此时开启02,则会复用这个已经存在的activity,并且把当前activity上面其他的activity从任务栈里清空!
相当于条用 onNewIntent+ClearTop
1. 设置了"singleTask"启动模式的Activity,它在启动的时候,会先在系统中查找属性值affinity等于它的属性值taskAffinity的任务存在;如果存在这样的任务,它就会在这个任务中启动,否则就会在新任务中启动。因此,如果我们想要设置了"singleTask"启动模式的Activity在新的任务中启动,就要为它设置一个独立的taskAffinity属性值。
2. 如果设置了"singleTask"启动模式的Activity不是在新的任务中启动时,它会在已有的任务中查看是否已经存在相应的Activity实例,如果存在,就会把位于这个Activity实例上面的Activity全部结束掉,即最终这个Activity实例会位于任务的堆栈顶端中。
3.应用场景:
浏览器:底层使用的是webkit c 内核,初始化一次需要申请很多的内存资源,占用cpu时间所以使用singletask,保证在任务栈里只会有一个实例存在
四:singleInstance的启动模式(相当于实例):
1.Androidfest的配置:
<activityandroid:name="com.itcode.taskstack.SecondActivity"
android:label="@string/_second"
android:launchMode="singleInstance">
</activity>
2.特点:
singleInstance的启动模式更加极端,开启新的activity,会给自己创建一个单独的任务栈
不管是从应用内部打开还是通过其他应用调用
TaskId是单独的,已存在的则只需调用onNewIntent
3.应用场景:
在整个手机操作系统里面只会有一个该activity的实例存在,有道词典,金山词典
所以多个应用程序共享这个activity的实例,有线程安全问题!
例如闹铃提醒,将闹铃提醒与闹铃设置分离
相关文章推荐
- Error:Cause: org/gradle/api/publication/maven/internal/DefaultMavenFactory Android
- Android内存泄露的问题
- 电脑上用adb连接到Android设备(开发板也可)
- Android 获取手机号
- Android Design Support Library使用详解
- Android Studio 导入Github项目错误解决
- android开发中使不同的listview同时联动
- Android MVP模式初体验
- android.intent.action.SCREEN_ON与android.intent.action.SCREEN_OFF
- Android悬浮窗进阶版-下篇(福利篇)
- android mediaplayer相关
- Android Studio 生成 JavaDoc 空指针异常|文档编码出错|内存溢出
- Android 系统状态参数和开机服务状态
- Android多线程异步处理:AsyncTask 的实现原理
- 在android开发中调用Geocoder方法返回空值的问题
- The following classes could not be instantiated: - android.support.v7.widget.Toolbar 解决办法
- Android实现支持进度条显示的短信备份工具类
- Android View体系(七)从源码解析View的measure流程
- Android studio中如何修改运行环境中最低版本和目标版本
- Google cardBoard Android的两个jar包,以及Demo