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

targetSdkVersion升级至31后PendingIntent设FLAG_IMMUTABLE仍崩溃如何解决

修复方案

1 排查自有代码所有PendingIntent创建场景

你当前的适配代码仅覆盖了PendingIntent.getActivity()场景,且未拼接原有业务需要的flag,这是最常见的漏改原因:

  • 检查所有PendingIntent.getBroadcast()、PendingIntent.getService()、PendingIntent.getForegroundService()调用,尤其桌面小组件的RemoteViews绑定点击事件通常会用到getBroadcast(),这类调用全部要加上版本适配
  • 不要直接替换原有flag,需要用按位或拼接规则:如果你的业务需要更新PendingIntent的extra、复用已有PendingIntent,需要保留FLAG_UPDATE_CURRENT等原有flag,示例代码如下:
val pendingFlag = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.S) {
    // 不需要系统修改PendingIntent的场景用FLAG_IMMUTABLE
    // 用于inline回复、气泡通知、小组件交互的场景必须用FLAG_MUTABLE
    PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
} else {
    PendingIntent.FLAG_UPDATE_CURRENT
}
pendingIntent = PendingIntent.getActivity(context, 0, intent, pendingFlag)

2 排查第三方依赖库的适配问题

即使你自己的代码全部适配完成,第三方SDK内部创建的PendingIntent未适配也会触发崩溃:

  • 打开Firebase Crashlytics的崩溃堆栈,定位崩溃触发的具体类和方法,如果归属第三方SDK,直接将对应SDK升级到2021年10月之后发布的适配Android12的版本即可
  • 重点排查以下组件:
    • 各类推送SDK(小米、华为、极光、个推等)
    • 广告、统计类SDK
    • Jetpack WorkManager需升级到2.7.0及以上版本

3 特殊场景适配

如果你的PendingIntent用于以下场景,必须使用FLAG_MUTABLE,不能用FLAG_IMMUTABLE,否则系统无法修改PendingIntent参数触发对应交互,也会抛出异常:

  • 通知的inline回复功能
  • 气泡通知功能
  • 桌面小组件的交互事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 08:06:04