Activity -> LaunchMode

2017-10-18  本文已影响0人  markchan

定义了Activity加载到Activity Task(任务栈)的行为

Activity的LaunchMode(启动模式)有以下四种:

[假设操作的Activity对象为A_Activity]

1. Standare - Activity默认的启动模式

Standare模式下启动A_Activity, 系统都会新建一个A_Activity的实例, 并将其加入到任务栈中, 同时依次调用A_ActivityonCreate()onStart()onResume()的生命周期方法

2. SingleTop - 栈顶复用模式

SingleTop模式下启动A_Activity, 如果A_Activity位于任务栈的栈顶, 那么再次启动A_Activity时, 系统将不会再去新建一个A_Activity实例,而是复用已位于任务栈栈顶的A_Activity

3. SingleTask - 栈内复用模式

该模式相当于Activity特定任务栈中的单例模式. 与SingleTop类似, 只不过是检测范围的不同: SingleTop的检测范围是检测栈顶元素是否为A_Activity, 而SingleTask的检测范围则扩散到整个任务栈中去检测是否已经存在A_Activity实例

4. SingleInstance

这个模式非常接近于SingleTask, 系统中只允许一个A_Activity的实例存在. 区别在于持有A_Activity的任务栈中只能有这个一个Activity: 即这个单例本身

设置Activity的启动模式

方式一: 直接在AndroidManifest.xml指定Activity的启动模式

<?xml version="1.0" encoding="utf-8"?>
<manifest>

    <application>
        <activity
            android:name=".XxxActivity">
            android:launchMode="standard | singleTop | singleTask | singleInstance">
        </activity>
    </application>

</manifest>

方式二: 通过Intent添加IntentFlag(猛戳>>常用的IntentFlag的介绍)来指定Activity的启动模式

Intent intent = new Intent();
intent.setClass(MainActivity.this,TargetActivity.class);
intent.addFlags(Intent.FLAG_XXX);
startActivity(intent);
Refer
上一篇 下一篇

猜你喜欢

热点阅读