Android基础篇之Activity(五)-onNewIntent()方法

来源:互联网 发布:淘宝大药房是正品吗 编辑:程序博客网 时间:2024/05/17 01:07

onNewIntent()

onNewIntent()应用场景

假如我们的应用中有一个Activity,这个Activity会被多个Activity所调用、启动、并且这个Activity的启动模式并非为standard模式,例如是singleTop,如果Activity处于当前栈的顶部(关于Activity的相关知识可以看一下 《Android基础篇之Activity(三) - Activity的Task和启动模式 》)则其他的Activity在此使用Intent来启动这个Activity的时候并不会重新执行onCreate()等生命周期方法,而会执行onNewIntent()方法,在这种情况下我们如果需要处理多个Activity的Intent就需要使用onNewIntent()方法了。

@Overrideprotected void onNewIntent(Intent intent) {    super.onNewIntent(intent);}

onNewIntent()方法的参数是一个Intent,就是用来启动当前Activity的Intent。

onNewIntent()方法什么时候被调用?

onNewIntent是否被调用与Activity的launchMode有关系、与启动该Activity的intent的flag也有关系。
当设置launchMode或者Intent的flag之后,启动Activity并不会创建新的Activity时候,而是重新启动栈中的Activity的时候就会调用onNewIntent。上面我们已使用launchMode=“singleTop”为例说明了。若这一段描述不是很理解的可以阅读一下《 Android基础篇之Activity(三) - Activity的Task和启动模式 》这篇文章,对栈、启动模式、和intent flag有了了解之后在思考这段描述应该会有新的理解。大家也可以写个demo测试一下。

onNewIntent()的setIntent()和getIntent()

onNewIntent()方法的参数是一个Intent,这个Intent就是启动当前Activity的Intent。

    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        String tag = "";        if(intent != null) {            tag = intent.getStringExtra("tag");        }        Log.i("TAG", "onNewIntent tag = " + tag);    }

通过上述的方式可以获取到启动该Activity中所传递的数据。但是我们通过下面这段代码获取数据就会出现问题。

    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        String tag = "";        tag = getIntent().getStringExtra("tag");        Log.i("TAG", "onNewIntent tag = " + tag);    }

我们一般在onCreate()方法中使用getIntent()方法来获取intent,但是在这里我们使用getIntent()的结果却与我们预期的效果不一致,这是为什么呢?

Activity中有一个setIntent方法,设置启动该Activity的Intent(保存该Intent),如果我们要通过getIntent()方法来获取正确的数据,应该使用setIntent()方法来设置正确Intent。

    @Override    protected void onNewIntent(Intent intent) {        super.onNewIntent(intent);        String tag = "";        setIntent(intent);        tag = getIntent().getStringExtra("tag");        Log.i("TAG", "onNewIntent tag = " + tag);    }

通过上述代码得到的就是我们预期的效果啦。

感慨一下,最近写了几篇博客,有些参考网上大神的总结,也有自己总结的,可能会有很多不足之处,或者有待验证的地方。大家多多谅解。写博客的目的多是为了能让自己的技术进步,也希望能带给大家一下帮助,如果有误导的地方大家多多指正,共同进步!

0 0
原创粉丝点击