Android:能否在onNewIntent触发后后续时机获取对应Intent?
可以实现,无需自定义成员变量存储新Intent
核心逻辑
Activity本身会维护当前的Intent实例,只要在onNewIntent()回调中更新这个内置实例,后续任何时机都能直接获取到最新的Intent,不用自己额外存储。
具体操作
更新Activity内置的Intent实例
在Activity的onNewIntent()方法中,调用setIntent(intent)将新传入的Intent替换为Activity当前持有的Intent:override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.let { setIntent(it) } }Java版本:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }在LiveData Observer中对比Intent
首先在Activity启动时(比如onCreate()里)保存好原始的启动Intent(这一步用成员变量没问题,你只是不想存储新的Intent),之后在Observer的回调里,直接调用getIntent()拿到最新的Intent,用filterEquals()方法和原始Intent对比:// 在Activity的成员变量中保存原始Intent private val originalIntent: Intent by lazy { intent } // 后续在LiveData的Observer中 someLiveData.observe(this) { val currentIntent = intent if (!currentIntent.filterEquals(originalIntent)) { // 当前Intent和原始启动Intent不同,说明收到过新的Intent } }
注意要点
- 只有当Activity的启动模式为
singleTop、singleTask或singleInstance时,才会触发onNewIntent()回调;如果是默认的standard模式,每次启动都会创建新的Activity实例,不会走这个流程。 - 不要直接用
==比较Intent对象,filterEquals()才是判断两个Intent内容是否一致的标准方法,它会比较Intent的动作、数据、类型、类别和组件等核心信息。
内容的提问来源于stack exchange,提问作者Moti Bartov
相关产品推荐
相关产品推荐

