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

使用Parcelable额外数据启动Service时崩溃问题求助

解决方案:Service运行时获取Parcelable数据空指针问题

问题本质

当Service已运行时,调用intent.getParcelableExtra(NAME, LatLng.class)抛出空指针,核心原因是带Class参数的getParcelableExtra重载方法在Service复用场景下存在兼容性问题,内部处理时Class对象被误判为null,触发Class.isInterface()的空指针调用。

修复代码

放弃使用带Class参数的API重载,改用传统的getParcelableExtra(String)方法并强制类型转换:

错误代码(触发异常)

LatLng latLng = intent.getParcelableExtra(LOCATION_KEY, LatLng.class);

正确代码(解决异常)

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    // 先判断Intent是否为空(系统重启Service时可能传入null)
    if (intent != null) {
        // 传统方式获取并强制转换Parcelable数据
        LatLng latLng = (LatLng) intent.getParcelableExtra(LOCATION_KEY);
        if (latLng != null) {
            // 处理LatLng数据逻辑
        }
    }
    return START_STICKY; // 根据业务需求选择合适的返回值
}

补充说明

  1. 增加intent != null判断,避免系统因内存不足重启Service时,传入null Intent引发后续异常。
  2. 强制转换方式绕过了新API内部的Class参数校验逻辑,不会触发空指针问题,同时兼容所有支持Parcelable的Android版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:23:29