定义了
Activity
加载到Activity Task
(任务栈)的行为
Activity的LaunchMode(启动模式)有以下四种:
[假设操作的Activity对象为A_Activity
]
1. Standare - Activity默认的启动模式
在Standare模式下启动A_Activity
, 系统都会新建一个A_Activity
的实例, 并将其加入到任务栈中, 同时依次调用A_Activity
的onCreate()
、onStart()
、onResume()
的生命周期方法
2. SingleTop - 栈顶复用模式
在SingleTop模式下启动A_Activity
, 如果A_Activity
位于任务栈的栈顶, 那么再次启动A_Activity
时, 系统将不会再去新建一个A_Activity
实例,而是复用已位于任务栈栈顶的A_Activity
-
A_Activity
位于栈顶:复用位于栈顶的实例, 并回调
A_Activity
的onNewIntent()
方法 -
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的启动模式
<?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);
网友评论