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

如何清除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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 05:22:33