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

应用后台与被终止状态下点击推送通知的差异及页面路由问题

问题解答

一、后台运行状态 vs 被终止状态的差异

你预设的「所有消息数据均从onNewIntent获取」的逻辑仅在应用后台存活时成立,两种状态的核心差异如下:

  • Intent触发逻辑差异
    后台运行时:应用进程存活,对应打开的Activity实例未被销毁,系统不会重新创建根Activity,直接触发onNewIntent方法回传推送携带的所有数据,你可以直接在该方法回调里取到完整的消息参数。
    被终止状态时:应用进程已被系统回收,系统会先冷启动应用、创建根Activity实例,先走onCreate生命周期,此时onNewIntent不会被触发,你无法从该方法拿到任何推送数据,所有消息数据会被携带在onCreate方法的入参intent中,需要你主动从这个初始Intent里提取参数。
  • 数据留存差异
    后台运行时:应用全局上下文、本地缓存、页面状态全部保留,你拿到推送数据后可以直接基于当前状态做跳转、数据更新等操作,不需要重新初始化基础配置。
    被终止状态时:所有全局缓存、页面状态全部被清空,你拿到推送数据后需要先走完应用的正常冷启动流程(比如权限校验、用户登录态校验、基础配置初始化等),才能处理推送的跳转逻辑。
  • 性能表现差异
    后台运行时:点击通知后应用会秒级切到前台,响应速度很快,没有冷启动的白屏/黑屏时间。
    被终止状态时:点击通知后会先走冷启动流程,有明显的启动等待时间,部分低端机型可能会出现短暂的启动页白屏。

二、点击后台状态应用推送的页面路由表现

这个行为取决于你给推送通知配置的Intent的启动模式标记,分两种情况:

  • 如果你给通知的Intent加了FLAG_ACTIVITY_SINGLE_TOP、FLAG_ACTIVITY_CLEAR_TOP这类不会重建根Activity的标记,页面会保留之前的route path,不会被重置到初始界面,你可以在onNewIntent拿到推送数据后自己控制要不要做页面跳转。
  • 如果你没有加上述标记,或者加了FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK这类会清空任务栈的标记,页面会被重置到初始界面,之前的路由路径会被清空。

主流厂商的推送SDK默认的type3(打开应用)配置,一般都会加保留任务栈的标记,默认不会重置页面路由,如果你发现出现了重置情况,优先检查你给通知配置的Intent标记,以及主Activity的launchMode配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:39:01