Activity -> LaunchMode

定义了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

  • A_Activity位于栈顶:

    复用位于栈顶的实例, 并回调A_ActivityonNewIntent()方法

  • A_Activity不位于栈顶(包括有实例位于任务栈中但不位于栈顶在任务栈中没有任何实例)

    此时在SingleTop的模式下启动的A_Activity与Standard模式下启动的A_Activity的流程是一样的: 系统会新建一个A_Activity的实例, 并依次调用其对应的生命周期方法

3. SingleTask - 栈内复用模式

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

  • 任务栈中存在A_Activity实例

    直接将A_Activity置于栈顶,并将A_Activity以上的Activity都从任务栈中移出销毁, 同时回调其onNewIntent()方法

  • 任务栈中不存在任何A_Activity实例

    此时在SingTask的模式下启动的A_Activity与Standard模式下启动的A_Activity的流程是一样的: 系统会新建一个A_Activity的实例, 并依次调用其对应的生命周期方法

4. SingleInstance

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

设置Activity的启动模式

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




    
        
            android:launchMode="standard | singleTop | singleTask | singleInstance">
        
    


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

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

你可能感兴趣的:(Activity -> LaunchMode)