Parcelable踩坑

问题

************* Crash Log Head ****************
Device Manufacturer: alps
Device Model       : S21
Android Version    : 8.0.0
Android SDK        : 26
App VersionName    : 1.0.11
App VersionCode    : 9
************* Crash Log Head ****************

java.lang.RuntimeException: Error receiving broadcast Intent { act=com.zp.android.scmp.Action_Task_Finished flg=0x10 (has extras) } in com.zp.android.scmp.module.seccheck.view.SecCheckFragment$4@1000f40
	at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51697(LoadedApk.java:1334)
	at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
	at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
	at android.os.Handler.handleCallback(Handler.java:869)
	at android.os.Handler.dispatchMessage(Handler.java:101)
	at android.os.Looper.loop(Looper.java:206)
	at android.app.ActivityThread.main(ActivityThread.java:6760)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)
Caused by: java.lang.RuntimeException: Parcel android.os.Parcel@83c61b3: Unmarshalling unknown type code 6226009 at offset 2760
	at android.os.Parcel.readValue(Parcel.java:2763)
	at com.zp.android.scmp.data.model.ExecUser.<init>(ExecUser.java:57)
	at com.zp.android.scmp.data.model.ExecUser$1.createFromParcel(ExecUser.java:63)
	at com.zp.android.scmp.data.model.ExecUser$1.createFromParcel(ExecUser.java:61)
	at android.os.Parcel.createTypedArrayList(Parcel.java:2401)
	at com.zp.android.scmp.data.model.Task.<init>(Task.java:114)
	at com.zp.android.scmp.data.model.Task$1.createFromParcel(Task.java:35)
	at com.zp.android.scmp.data.model.Task$1.createFromParcel(Task.java:33)
	at android.os.Parcel.readParcelable(Parcel.java:2790)
	at android.os.Parcel.readValue(Parcel.java:2684)
	at android.os.Parcel.readArrayMapInternal(Parcel.java:3051)
	at android.os.BaseBundle.unparcel(BaseBundle.java:257)
	at android.os.Bundle.getParcelable(Bundle.java:888)
	at android.content.Intent.getParcelableExtra(Intent.java:7075)
	at com.zp.android.scmp.module.seccheck.view.SecCheckFragment$4.onReceive(SecCheckFragment.java:140)
	at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51697(LoadedApk.java:1323)
	... 9 more
java.lang.RuntimeException: Parcel android.os.Parcel@83c61b3: Unmarshalling unknown type code 6226009 at offset 2760
	at android.os.Parcel.readValue(Parcel.java:2763)
	at com.zp.android.scmp.data.model.ExecUser.<init>(ExecUser.java:57)
	at com.zp.android.scmp.data.model.ExecUser$1.createFromParcel(ExecUser.java:63)
	at com.zp.android.scmp.data.model.ExecUser$1.createFromParcel(ExecUser.java:61)
	at android.os.Parcel.createTypedArrayList(Parcel.java:2401)
	at com.zp.android.scmp.data.model.Task.<init>(Task.java:114)
	at com.zp.android.scmp.data.model.Task$1.createFromParcel(Task.java:35)
	at com.zp.android.scmp.data.model.Task$1.createFromParcel(Task.java:33)
	at android.os.Parcel.readParcelable(Parcel.java:2790)
	at android.os.Parcel.readValue(Parcel.java:2684)
	at android.os.Parcel.readArrayMapInternal(Parcel.java:3051)
	at android.os.BaseBundle.unparcel(BaseBundle.java:257)
	at android.os.Bundle.getParcelable(Bundle.java:888)
	at android.content.Intent.getParcelableExtra(Intent.java:7075)
	at com.zp.android.scmp.module.seccheck.view.SecCheckFragment$4.onReceive(SecCheckFragment.java:140)
	at android.app.LoadedApk$ReceiverDispatcher$Args.lambda$-android_app_LoadedApk$ReceiverDispatcher$Args_51697(LoadedApk.java:1323)
	at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.$m$0(Unknown Source:4)
	at android.app.-$Lambda$FilBqgnXJrN9Mgyks1XHeAxzSTk.run(Unknown Source:0)
	at android.os.Handler.handleCallback(Handler.java:869)
	at android.os.Handler.dispatchMessage(Handler.java:101)
	at android.os.Looper.loop(Looper.java:206)
	at android.app.ActivityThread.main(ActivityThread.java:6760)
	at java.lang.reflect.Method.invoke(Native Method)
	at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:845)

注:在android 7.0和8.0上均能复现,android9.0未能复现(怀疑google修复过?)。

原因

在合并分支的时候将类中变量的read和write顺序搞乱了。Parcelable序列化时必须保证读写顺序一致,读写类型一致。

参考

How to fix Unmarshalling unknown type code XXX at offset YYY in Android?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值