Android的四种启动模式以及onNewIntent方法

前言

  想起来写这个是因为之前在开发过程中遇到在onStart()方法中使用getIntent()方法无法获取到启动activity时传入的数据,也是纳闷了很久,然后就决定好好看一下这个地方,本文章会结合简单的demo先说说四个启动模式,搞清楚启动模式之后,就明白为什么getIntent()得不到我们想要的数据了。
开发环境: Android Studio 3.0.1
设备: 逍遥安卓 5.1.1

解决办法

  因为感觉文章写的非常啰嗦,但是又怕讲的不够清楚,如果想直接找到解决方案的可以直接看这里。重写目标Activity的onNewIntent方法。然后你就能在onStart中通过getIntent得到正确的值了。
  

@Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent);
    }

Android四种启动模式

1. standard

    默认启动模式,每次激活Activity时都会创建Activity,并放入任务栈中。

2. singleTop

    如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。

3. singleTask

    如果在栈中已经有该Activity的实例,就重用该实例(会调用实例的onNewIntent())。重用时,会让该实例回到栈顶,因此在它上面的实例将会被移除栈。如果栈中不存在该实例,将会创建新的实例放入栈中。 

4. singleInstance

    在一个新栈中创建该Activity实例,并让多个应用共享改栈中的该Activity实例。一旦改模式的Activity的实例存在于某个栈中,任何应用再激活改Activity时都会重用该栈中的实例,其效果相当于多个应用程序共享一个应用,不管谁激活该Activity都会进入同一个应用中。

Activity启动模式设置:

    <activity android:name=".MainActivity" android:launchMode="standard" />

DEMO

  只是看概念可能会有一些抽象,所以就结合代码示例来理解下,当然其实我觉得在经过一段时间的开发后,我们应该要能通过官方文档就理解知识点,我们需要具备这种能力,才能提高学习效率。这都是题外话,接下来就顺着代码分析。
  首先为了减少重复代码写一个基类Activity,加上我们需要的日志。这里我们有一点要注意的地方,不要用系统的返回按钮返回到主界面,因为那样会销毁当前的Activity的,所以在当前Activity上加一个按钮用来返回主界面。为了看看不同启动模式Activity的区别,所以就让启动的Activity到后台而不是销毁掉。
  这里写图片描述
如图所示,点击BACK按钮返回主界面,而不是小三角。

/**
 * Created by wanghang on 2018/5/17.
 */

public class BaseActivity extends Activity {
   
    private String TAG = this.getClass().getSimpleName();

    @Override
    protected void 
  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Android系统中,Activity有四种启动模式,分别是: 1. Standard模式:默认的启动模式,每次启动Activity都会创建一个新的实例。如果在应用程序中多次启动同一个Activity,就会创建多个Activity实例。它的特点是可以在任何地方启动Activity,不会影响其他Activity的生命周期。 2. SingleTop模式:如果要启动的Activity在栈顶已经存在,那么不会创建新的实例,而是复用栈顶的Activity,并调用onNewIntent()方法传递参数。如果要启动的Activity不在栈顶,那么就会创建新的实例。它的特点是可以避免创建多个实例,但是如果Activity已经存在且不在栈顶,还是会创建新的实例。 3. SingleTask模式:如果要启动的Activity在栈中已经存在,那么系统就不会创建新的实例,而是将栈中该Activity上面的所有Activity全部出栈,使该Activity成为栈顶。如果要启动的Activity不在栈中,那么就会创建新的实例。它的特点是可以保证一个Activity只有一个实例,并且在栈中只有一个实例。 4. SingleInstance模式:一个独立的栈会为该Activity创建,且该栈中只有该Activity的实例。如果要启动的Activity已经存在于独立栈中,那么就会复用该Activity的实例。如果要启动的Activity不在独立栈中,那么就会创建新的实例并放入该独立栈中。它的特点是可以保证在整个系统中只有一个实例,并且该实例会独立于其他Activity。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值