Android Activity的四种启动模式

简介

Activity 作为活动窗口是用户与 Android 手机交互的主要载体,作为开发者,我们应当管理和利用好每一个 Activity。

Android 使用 ‘先进后出 (FILO)’ 的任务栈模式去管理这些Acitivity,了解熟悉 Acticity 的启动模式,可以帮助我们自由的控制这个任务栈的进出关系.

Android 中 Activity的启动模式分为四种,分别是:

Standard (标准模式)

SingleTop (栈顶复用模式)

- SingleTask (栈内复用模式)

SingleInstance (单例模式)

设置

我们在 AndroidManifest.xml 中设置 Activity 启动模式:

<activity android:name=".MainActivity"
    android:launchMode="singleTop"
    android:theme="@style/AppTheme"/>


具体介绍

Activity的四种启动模式:


Standard

如果你没在 AndroidManifest.xml 中 给 Activity 设置 android:launchMode,那么默认为 Standard.

Standard 模式下,每次 startctivity 时都会创建新的 activity 实例,并放入同一个栈中,当前 Activity finish() 后,他会将栈顶(当前Activity)移除栈,我们会回到上一个Actvity.

举个例子,当前应用只有一个 MainActivity, 他会 startActivity(new Intent(MainActivity.this, MainActivity.class)) 多次,并且按返回键多次,我们来看下他的任务栈变化.

第一次打开只有一个 MainActivity, 在 Standard 下多次 start MainActivity,则会添加多个实例。



SingleTop


当我们startActivity 时,当任务栈的栈顶正好是将要启动的 Activity 时,不会重新创建新的,而是会复用当前实例,当前 Activity 的

onCreate() 不会走,而是会去调用 onNewIntent(), 告诉开发者有新的 Intent 携带数据进来。

如果当前任务栈的栈顶不是将要启动的 Activity, 那么效果会和 Standard 一样重新创建实例放入栈顶。

举例1:A 和 B 二个 Activity, A是 Standard, B是 SingleTop, 打开默认是 A, 跳转 B, 再跳转 B, 效果就是    

(栈底部)A B B(栈顶部);  --> 第二个 B 不会创建, 而是选择复用栈顶的那个

 

举例2:A 和 B 二个 Activity ,A是 Standard, B是 SingleTop, 打开默认是 A, 跳转 B, 再跳转 A, 再跳转至 B  

(栈底部)A - B - A - B(栈顶部);  --> 不再栈顶启动, 会重新创建



SingleTask


调用 startActivty() 时如果当前栈中已经有将要启动的 Activity 实例不管 Activity 处于什么位置不会重新创建而是重用该实例并且

将清空处于该 Acitivity 栈位置之上的所有 Activity 实例.

如果栈中不存在该实例,将会创建新的实例放入栈中。 

A 和 B 二个 Activity, A是 SingleTask, B是 Standard, 打开默认是 A, 跳转 B, 再跳转至 A, 效果就是    

(栈底部)A  B  A (栈顶部);  --> 只剩下当初那个 A


SingleInstance

(这是一种单例模式)

如果将要启动的 Acitivyt 实例已经存在则找到实例所属于的栈继续使用不会创建实例否则会创建一个新的栈单独管理这个 Acitivity 实例

举例:A 和 B 二个 Activity, A是 Standard, B是 singleInstance, 打开默认是A, 然后跳转B, 再跳转A, 在跳转B 

A A

B  B

存在2个栈,其中 B 单独使用一个栈,而且B, 只存在一个实例

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值