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

Xamarin官方前台服务示例启动触发空引用异常崩溃问题求解

Xamarin Android 前台服务PendingIntent空引用崩溃修复

问题表现

  • 基于官方ForegroundServiceDemo示例开发Xamarin前台服务,编译部署到三星S10设备后,点击「Start Service」按钮应用直接崩溃
  • 崩溃触发位置为TimeStampService.cs第155行,对应代码:
var pendingIntent = PendingIntent.GetActivity(this, 0, notificationIntent, PendingIntentFlags.UpdateCurrent); 
  • 抛出异常类型为空引用异常,堆栈跟踪信息:
at Android.Runtime.JNINativeWrapper._unhandled_exception (System.Exception e) [0x0000e] in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:12 
at Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLII_I (_JniMarshal_PPLII_I callback, System.IntPtr jnienv, System.IntPtr klazz, System.IntPtr p0, System.Int32 p1, System.Int32 p2) [0x00022] in /Users/runner/work/1/s/xamarin-android/src/Mono.Android/Android.Runtime/JNINativeWrapper.g.cs:221 at (wrapper native-to-managed) Android.Runtime.JNINativeWrapper.Wrap_JniMarshal_PPLII_I(intptr,intptr,intptr,int,int)
  • 已尝试全量更新依赖版本、从零新建空白服务项目测试,问题仍稳定复现

根因

该崩溃是Android 12(API 31)及以上版本的系统行为变更导致:从API31开始,所有PendingIntent创建时必须显式声明可变性标志(PendingIntentFlags.Mutable或PendingIntentFlags.Immutable),未声明时系统会直接拒绝创建PendingIntent并抛出异常。
官方示例长期未适配该系统规则,三星S10出厂或更新后的系统版本多为Android12及以上,因此稳定触发崩溃。你看到的空引用异常是Xamarin Android运行时对原生层异常包装不当产生的误导性报错,并非代码中存在未赋值的空对象。

修复步骤

  1. 修改PendingIntent创建逻辑,按系统版本补充对应的可变性标志,绝大多数前台服务通知点击场景使用Immutable标志即可,修复后代码如下:
var pendingIntentFlags = PendingIntentFlags.UpdateCurrent;
// Android12及以上版本强制要求指定PendingIntent可变性
if (Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.S)
{
    pendingIntentFlags |= PendingIntentFlags.Immutable;
}
var pendingIntent = PendingIntent.GetActivity(this, 0, notificationIntent, pendingIntentFlags);
  1. 配套检查项
    • 确认项目目标框架版本设置不低于Android 12 (API 31),否则编译时无法识别可变性标志枚举值
    • 如果后续需要更新该PendingIntent携带的Intent额外参数,将上述代码中的Immutable替换为Mutable即可
    • 提前确认notificationIntent对应的目标Activity已在应用清单文件中正确注册,避免后续触发Activity未找到异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 23:33:26