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

Android targetSdk29下点击通知如何按需显示或跳过闪屏页?

解决方案

步骤1:配置Activity启动模式

在AndroidManifest.xml中为MainActivity指定singleTask启动模式,保证全局只有一个实例,已有实例时不会重复创建,仅将实例切至前台:

<activity
    android:name=".MainActivity"
    android:launchMode="singleTask" />
<!-- SplashActivity保持默认配置即可,作为LAUNCHER入口 -->
<activity
    android:name=".SplashActivity"
    android:exported="true">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

步骤2:构造通知的PendingIntent

直接使用和桌面启动图标完全一致的Intent构造逻辑,系统会自动处理任务栈的判断逻辑,完全符合你要求的效果:

// 构造和桌面启动完全一致的Intent
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setClass(context, SplashActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// targetSdk=29可直接使用FLAG_UPDATE_CURRENT
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 设置到通知
notificationBuilder.setContentIntent(pendingIntent);

实现逻辑说明

  • 当MainActivity已存在时:应用的任务栈存活,系统会直接将整个任务栈切至前台,不会触发SplashActivity的创建,完全复用已有的MainActivity实例。
  • 当MainActivity已销毁时:应用没有存活的任务栈,系统会正常启动SplashActivity,走原有冷启动流程跳转至MainActivity。
  • 不需要自行维护Activity的存活状态,完全由系统任务栈机制处理,不会出现内存泄漏风险,逻辑和桌面启动效果完全一致。

可选补充

如果需要在通知点击时传递参数给MainActivity,直接给Intent添加Extra即可,在MainActivity的onCreate(首次创建)和onNewIntent(切到前台)方法中都可以获取到传入的参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:54:04