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

Android开启不保留活动时跳转Activity的onNewIntent无extra参数问题

问题根因

这个问题是「不保留活动」特性和Activity启动Flag、Context类型共同作用导致的,核心有两点:

  1. 系统自动重建优先级高于回调启动:SDK内部Activity销毁时,系统检测到任务栈下层的Activity A已经被销毁,会先自动重建A实例并拉回前台,此时A的onCreate收到的是A最初的启动Intent,自然没有result参数。
  2. 启动Flag行为被隐式篡改:你代码中调用ContextCompat.startActivity时如果传入的context是Application Context而非Activity实例,ContextCompat会自动为Intent添加FLAG_ACTIVITY_NEW_TASK标记,和你手动设置的FLAG_ACTIVITY_SINGLE_TOP、FLAG_ACTIVITY_CLEAR_TOP共同作用时,会在新任务栈启动A实例,而非复用已经被系统重建的前台A实例,自然onNewIntent也收不到带参数的Intent。

另外如果你的Activity A启动模式为默认standard,FLAG_ACTIVITY_CLEAR_TOP的默认行为会销毁已有A实例重建新实例,也可能导致参数传递链路断裂。


修复方案

1. 修正启动逻辑

  • 优先使用当前Activity实例作为Context启动,避免自动添加FLAG_ACTIVITY_NEW_TASK,如果必须用Application Context,显式声明所有Flag:
// 回调内启动逻辑修正
Intent intent = new Intent(context, ActivityA.class)
        // 冗余的CLEAR_TOP可以去掉,只保留SINGLE_TOP即可
        .addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
        .putExtra("result", result);
// 确认context是Activity实例,不要传Application Context
ContextCompat.startActivity(context, intent, null);
  • 可选:在Manifest中给Activity A添加android:launchMode="singleTop",和启动Flag保持一致,避免行为冲突。

2. 全链路接收参数

在onCreate和onNewIntent中同时处理参数,并且更新Activity内部缓存的Intent,避免后续业务逻辑调用getIntent()拿不到新参数:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // 处理系统重建/首次启动的Intent
    handleResultIntent(getIntent());
}

@Override
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    // 更新Activity内部缓存的Intent
    setIntent(intent);
    // 处理回调启动的新Intent
    handleResultIntent(intent);
}

private void handleResultIntent(Intent intent) {
    if (intent == null) return;
    String result = intent.getStringExtra("result");
    if (result != null) {
        // 你的业务逻辑
        System.out.println("SUCCESS: " + result);
    }
}

3. 调试排查(可选)

如果修复后还是拿不到参数,可以在启动和接收时打印Intent的所有Extra,确认参数传递链路是否正常:

// 启动前打印
Log.d("DEBUG", "启动Intent携带参数:" + intent.getExtras());
// 接收时打印
Log.d("DEBUG", "收到Intent携带参数:" + intent.getExtras());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:45:00