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); }
通过上述代码得到的就是我们预期的效果啦。
感慨一下,最近写了几篇博客,有些参考网上大神的总结,也有自己总结的,可能会有很多不足之处,或者有待验证的地方。大家多多谅解。写博客的目的多是为了能让自己的技术进步,也希望能带给大家一下帮助,如果有误导的地方大家多多指正,共同进步!
- Android基础篇之Activity(五)-onNewIntent()方法
- [Android]Activity中的onNewIntent()方法
- 【android】在Activity中重写onNewIntent方法
- Activity onNewIntent方法浅析
- 06 Activity OnNewIntent方法
- Android之何时调用onNewIntent方法
- 【Android】 Activity启动模式singleTask的数据传输 onNewIntent方法
- Android-Activity中的onNewIntent()方法调用简析
- android四大组件之Activity - (2)onNewIntent()的作用
- --------------Activity onNewIntent 方法调用时机
- Activity类onNewIntent()方法详解
- 关于Activity的onNewIntent方法
- Activity的onNewIntent方法执行时间
- Android activity onNewIntent触发时机
- Android activity onNewIntent触发时机
- android onNewIntent方法
- android onNewIntent方法
- Android基础篇之Activity(四)-onSaveInstanceState()方法
- TOMCAT内存的设置
- android-Ultra-Pull-To-Refresh使用教程集锦
- activemq断线重连
- DataRow 包含字段
- 为什么要使用ZooKeeper
- Android基础篇之Activity(五)-onNewIntent()方法
- MySQL优化之distinct
- java.lang.management.ManagementFactory的JAVA属性
- POJ 1861 && ZOJ 1542--Network 【最小生成树 && kruscal && 水题】
- WinRT下的RSA加解密方法
- zoj 3545 - Rescue the Rabbit(AC自动机+dp)
- USB接口带不动USB移动硬盘的解决方法
- hpuoj1695 一道签到题【KMP】
- IO流之复制文件