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

使用Intent.FLAG_ACTIVITY_SINGLE_TOP与CLEAR_TOP时,Extra参数无法传递如何解决?

解决使用SINGLE_TOP和CLEAR_TOP标记时Extra参数传递为空的问题

首先咱们来拆解问题根源:当你设置FLAG_ACTIVITY_SINGLE_TOP | FLAG_ACTIVITY_CLEAR_TOP这两个标记时,如果第一个Activity(createAdActivity)已经存在于任务栈中,系统不会创建新实例,而是会调用它的onNewIntent()方法传递新Intent。但默认情况下,Activity保存的原有Intent不会自动替换,所以你在onResume()里调用getIntent()拿到的还是第一次启动时的旧Intent,自然获取不到新传递的Extra参数。

具体解决步骤:

  1. 更新第一个Activity的onNewIntent()方法
    你需要在这个方法里手动调用setIntent(intent),把新Intent替换掉Activity原来保存的旧Intent。修改后的代码如下:

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        // 关键操作:将新的Intent设置为当前Activity的Intent
        setIntent(intent);
    }
    
  2. 确保onResume()使用更新后的Intent
    因为已经通过setIntent()更新了Intent,你原来的onResume()代码不需要大改,现在getIntent()就能拿到新传递的Extra参数了。可以稍微优化逻辑避免空指针:

    @Override
    protected void onResume() {
        super.onResume();
        Toast.makeText(this,"IN RESUME ",Toast.LENGTH_LONG).show();
        // 此时getIntent()返回的是onNewIntent中设置的新Intent
        imageUris = getIntent().getParcelableArrayListExtra(Intent.EXTRA_STREAM);
        if(imageUris != null && !imageUris.isEmpty()) {
            createAdViewPagerAdapter viewpager = new createAdViewPagerAdapter(this,imageUris);
            photoViewer.setAdapter(viewpager);
        }
    }
    

额外说明:

  • FLAG_ACTIVITY_CLEAR_TOP会销毁目标Activity上方的所有Activity,将目标Activity带到栈顶;搭配FLAG_ACTIVITY_SINGLE_TOP时,系统会复用已存在的栈顶实例,调用onNewIntent()而非重新创建。
  • 只有调用setIntent(intent),后续的getIntent()才会返回新Intent,否则始终是第一次启动时的旧Intent。

这样修改后,你从第二个Activity返回第一个Activity时,既能正常获取到imgUriList参数,也能保留第一个Activity的原有状态啦。

内容的提问来源于stack exchange,提问作者jhashane

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:24:02