You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android:能否在onNewIntent触发后后续时机获取对应Intent?

可以实现,无需自定义成员变量存储新Intent

核心逻辑

Activity本身会维护当前的Intent实例,只要在onNewIntent()回调中更新这个内置实例,后续任何时机都能直接获取到最新的Intent,不用自己额外存储。

具体操作

  1. 更新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);
    }
    
  2. 在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 20:17:10