如何清除Activity Intent中指定的Extra参数?
解决Intent Extra参数无法清除的问题
问题原因
你在onDestroy里清除Extra无效,是因为系统会保留Activity任务栈中Intent的副本,即便你修改了当前Activity的intent,下次启动时系统还是会复用之前保存的旧Intent。而且onDestroy执行时,Activity已经处于销毁阶段,修改也无法影响系统保存的信息。
可行解决方案
1. 处理完参数后立即清除并更新Intent
在Activity的onCreate方法里,获取到EXTRA_KEY的值并完成Fragment跳转逻辑后,立刻清除该Extra,同时调用setIntent更新Activity持有的Intent实例,避免系统复用旧值:
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 获取传入的moduleCode val moduleCode = intent.getStringExtra("EXTRA_KEY") moduleCode?.let { // 执行打开对应Fragment的逻辑 // ... // 清除Extra并更新Intent intent.removeExtra("EXTRA_KEY") setIntent(intent) } }
2. 适配singleTop/singleTask启动模式
如果你的MainActivity设置了singleTop或singleTask启动模式,推送触发时系统会调用onNewIntent而非重新创建Activity,这时候要在该方法里同样处理:
override fun onNewIntent(intent: Intent?) { super.onNewIntent(intent) intent?.let { newIntent -> val moduleCode = newIntent.getStringExtra("EXTRA_KEY") moduleCode?.let { // 处理Fragment跳转逻辑 // ... // 清除Extra并更新当前Intent newIntent.removeExtra("EXTRA_KEY") setIntent(newIntent) } } }
额外说明
通过setIntent更新Activity的Intent实例,能确保系统后续复用的是已经清除了Extra的Intent,彻底解决旧值残留的问题。
内容的提问来源于stack exchange,提问作者Azat Sabirov
相关产品推荐
相关产品推荐

