Android singleInstance模式下跨应用Intent传值多次调用为空问题咨询
问题根因
你为TestActivity1、TestActivity2配置了singleInstance启动模式,当Activity实例已经在后台存在时,后续调用startActivity不会重新创建实例,系统也不会默认更新Activity持有的原始Intent对象。你在onResume中调用getIntent()拿到的始终是首次启动Activity时的旧Intent,因此只能读取到第一次传入的参数,后续新传的extra都拿不到。
修复方法
只需要在TestActivity1和TestActivity2两个类中重写onNewIntent方法,主动更新当前Activity持有的Intent即可,不需要修改其他现有逻辑:
@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); // 替换为新传入的Intent,后续调用getIntent就会返回最新的对象 setIntent(intent); }
添加后重启测试,就能正常读取每次跳转传入的新参数了。
适配跨应用通信的补充建议
如果是两个独立应用互相跳转的场景,建议在启动Intent中添加FLAG_ACTIVITY_NEW_TASK标记,适配跨应用启动的系统规则;同时传参用的Key建议定义为全局公共常量,避免两边拼写不一致导致读取失败。
内容的提问来源于stack exchange,提问作者Atila Rives
相关产品推荐
相关产品推荐

