使用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; // 根据业务需求选择合适的返回值 }
补充说明
- 增加
intent != null判断,避免系统因内存不足重启Service时,传入null Intent引发后续异常。 - 强制转换方式绕过了新API内部的Class参数校验逻辑,不会触发空指针问题,同时兼容所有支持Parcelable的Android版本。
内容的提问来源于stack exchange,提问作者0ne_Up
相关产品推荐
相关产品推荐

