四大启动模式深入剖析

Activity 的启动模式也是一个难点,原因是形形色色的启动模式和标志位太容易混淆,但是 Activity 作为四大组件之首,它的确非常重要,为了满足项目的需求,必须使用 Activity 的启动模式。

1. Activity 的 LaunchMode

1.1 启动模式

之所以 Activity 使用启动模式,因为 Activity 的创建是在任务栈中的,当我们启动同一个 Activity 时,系统就会创建多个 Activity 实例放入任务栈中,当我们按 back 键时,任务栈中的实例就会一一出栈。栈我想并不陌生,具有的特点:先进先出。如果我们不允许系统重复创建相同的 Activity ,我们就会用到 Activity 的启动模式进行设置。Activity 的启动模式分为四种 standard、singleTop、singleTask和 singleInstance,之前的那篇文章也有相关介绍,下面就简单提一下。

(1)standard 标准模式 :

这是系统默认的启动模式,每次启动一个 Activity 都会创建一个新的实例,不管这个实例是否存在。如果 A 启动了 B,B 的活动就会进入到 A 的任务栈中。

(2)singleTop 栈顶复用模式 :

在这种启动模式下,新的 Activity 已经位于栈顶,如果再次启动该 Activity ,此 Activity不会被重新创建。同时系统的 onNewIntent 方法被回调,通过此方法的参数我们可以取出当前的请求信息。当然 Activity 的 onCreate、onStart 和 onResume 方法不会重新被调用。如果该 Activity 没有位于栈顶,该活动就会重新被创建。

(3)singleTask 栈内复用模式 :

这是一种单例模式,在这种模式下,只要栈中存在该实例,该实例不会被重新创建。比如:我们想要创建一个实例 A,系统就会先判断任务栈中是否存在和 A 同样的实例。如果实例存在任务栈中,系统就会把 A 调用到栈顶并调用它的 onNewIntent 方法,同时 A 以上的 Activity 实例都会被移除出栈直到 A 位于栈顶位置;如果实例不存在,系统就会创新创建一个新的实例 A 并将其压入栈顶。

(3)singleInstance 单实例模式 :

我通常把这种模式的 Activity 称为 singleTask 模式的加强版,除了具有 singleTask 模式具有的特点外,以 singleInstance 启动的 Activity 实例单独存在一个任务栈中,后续的请求不会创建新的实例。

1.2 任务栈

什么是任务栈?各个 Activity 是怎么样分配到各个任务栈的?以下情况都是在 singleTask模式情况下来说的。

定义:

从一个参数说起,TaskAffinity ,翻译为任务的相关性,这个参数标识了一个 Activity 所需要得任务栈的名字,默认情况下,Activity 所需要的任务栈的名字为应用的包名。任务栈分为前台任务栈和后台任务栈,后台任务栈中的 Activity 处于暂停状态,用户可以将后台任务栈切换到前台。 ——任务栈

1.3 设置启动模式的两种方式

第一种方式 : 通过 AndroidMenifest 配置文件设置启动模式。

 1<activity 2      android:name=".MonitoringActivitys.MonitorActivity" 3       android:label="@string/title_activity_monitor" 4       android:theme="@style/AppTheme.NoActionBar" 5       android:launchMode="singleTask"> 6       <intent-filter> 7           <action android:name="android.intent.action.MAIN" /> 8           <category android:name="android.intent.category.LAUNCHER" /> 9       </intent-filter>10 </activity>

第二种方式 : 通过 Intent 中设置标志位来设置启动模式。

1Intent intent = new Intent(FirstActivity.this, SecondActivity.class);2intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);3startActivity(intent);

区别:

① 第二种优先级要高于第一种

② 第一种无法给 Activity 设定 FLAG_ACTIVITY_CLEAR_TOP 标识,第二种无法为 Activity 指定 singleInstance 模式。

©著作权归作者所有:来自51CTO博客作者mb5fe1601ede528的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. vscode是什么?vscode实例用法汇总
  2. Asp.Net Core如何安装?详解Asp.Net Core安装的实例教程
  3. 浅谈 下载实例 核心架构设计
  4. 分享一篇ASP.NET实现进度条的图文实例
  5. 有关经典实例的文章推荐10篇
  6. SignalR实现实时Web聊天的实例代码
  7. 详细介绍MvcPager分页控件使用的实例方法
  8. 右值引用如何使用?总结右值引用实例用法
  9. 关于foreach循环的实例用法汇总

随机推荐

  1. Android:启动页有短暂白屏的解决方法
  2. Consider adding android:paddingStart=
  3. Android Activity生命週期简介
  4. Android学习博客和文章存档
  5. 接收短信启动相应服务
  6. 管道的私用,删除android的流氓
  7. android 修改videoview的宽度和高度
  8. Android7.0适配教程与心得
  9. android集成百度地图SDK 自定义keystore
  10. Android开发资料视频教程(光盘6.2G)