在开发中出现了一个异常,A应用给B应用发送广播,广播中携带序列化对象,这个对象在B应用中序列化实现的是Parcelable接口,在B应用中序列化实现的是Serializable接口于是这时候出现了下面报错
Caused by: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class ClassName
at android.os.Parcel.readParcelableCreator(Parcel.java:2301)
at android.os.Parcel.readParcelable(Parcel.java:2240)
at android.os.Parcel.readValue(Parcel.java:2147)
at android.os.Parcel.readArrayMapInternal(Parcel.java:2478)
at android.os.BaseBundle.unparcel(BaseBundle.java:221)
at android.os.BaseBundle.getSerializable(BaseBundle.java:988)
at android.os.Bundle.getSerializable(Bundle.java:845)
at ClassName.onReceive(ClassName.java:868)
at android.app.LoadedApkReceiverDispatcherArgs.run(LoadedApk.java:866)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5285)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:969)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:764)
分析异常的时候很纳闷,明明是getSerializable最后为啥报错的时候说缺省了CREATOR属性,后来才发现误接收了B应用的广播,追查后才知道,A应用这部分实现是从B应用那边copy过来的,后来B应用改了下序列化实现方式于是就罪过了
bundle.setClassLoader(getClass().getClassLoader());