Android四种启动模式结合实例分析


Android四种启动模式:

一. Standard 标准模式

定义:

每次启动Activity都会创建一个新的实例入栈,无论这个实例是否存在(这是Activity默认的启动模式,如果没有设置启动模式,默认使用该模式。)。

举例:

我们在从ActivityA中点击跳转到ActivityB,再从ActivityB中跳转到ActivityB,这时候返回时需要点两次才能返回到ActivityA,说明

ActivityB启动了两次,即每次启动都会创建一个新的页面,即使ActivityB已经存在。


二. SingleTop 栈顶复用模式

定义:

跳转时系统会先在栈结构中查找是否已经有一个需要启动的Activity位于栈的顶部,如果有就直接使用,不再生成新的。

举例:

这时我们把ActivityB设置成SingleTop模式:android:launchMode=“singleTop",

1.现在我们增加ActivityB,并在ActivityB中的onCreate()方法和onNewIntent方法中分别打印log,我们一样从ActivityA中点击跳转到ActivityB,再在ActivityB中跳转ActivityB,我们连续多次点跳转按钮,这时候看log:


发现onCreate方法只在第一次点的时候有执行,后面点击都执行的是onNewIntent,然后点返回时只要点击一次就返回到ActivityA了,这就是因为当ActivityA跳转到ActivityB时创建了ActivityB实例,并位于栈的顶部(栈是一种“后进先出”的数据结构),这时候再从ActivityB点击跳转时,就不会再创建新的实例(但是会调用onNewIntent方法),直接拿来用了。

2.现在我们增加ActivityC,跳转顺序改成:ActivityA->ActivityB->ActivityC->ActivityB->ActivityC->ActivityB

这时候看log:


这时候发现ActivityB每次都执行onCreate方法,这就是因为ActivityB从ActivityC跳转回来时已经不是位于栈顶了,所以每次跳转回来都会创建新的实例。



三. SingleTask 栈内复用模式

定义:

跳转时系统会先在栈结构中是否已经有一个需要启动的Activity位于栈中,如果有就将栈中其他activity移除栈,使它位于栈顶,并使用它。

举例:

这时我们把ActivityB设置成singleTask模式:android:launchMode=“singleTask",

现在我们使用两种跳转顺序:

1.ActivityA->ActivityB->ActivityB->ActivityB->ActivityB->ActivityB

2.ActivityA->ActivityB->ActivityC->ActivityB->ActivityC->ActivityB


这时候我们发现两种跳转顺序打印的log都是一样的,都是在第一次跳转是执行onCreate后面都只执行onNewIntent,这就是因为SingleTask模式只要实例存在栈中,不管是否位于栈顶都不会重新创建。


四. SingleInstance 单实例模式

定义:

Android四种启动模式分析SingleInstance比較特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。

这个模式一般是用于系统应用中如Launch、锁屏键,我们应用少用这里不做过多解释。


转载于:https://juejin.im/post/5c26e249e51d45593b4bc9c0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值