在我的活动中,用户可以打开另一项活动。在应用程序工作流程中,用户在新打开的活动中执行某些任务后再次返回原始活动。
我有一个要求,需要在上次打开的状态下再次打开此其他活动。我目前通过在类变量mXYZActivityIntent
中保存用于打开新活动的意图来实现此目的。我将此变量保存在onSaveInstanceState()
中,并在onCreate()
Intent mXYZActivityIntent = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
//...........
if (savedInstanceState != null) {
mXYZActivityIntent = savedInstanceState.getParcelable("XYZ_INTENT");
}
}
@Override
public void onSaveInstanceState(@NonNull Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
if (mXYZActivityIntent != null) {
savedInstanceState.putParcelable("XYZ_INTENT", mXYZActivityIntent);
}
}
这种方法有什么问题吗?
用户最近报告了与此功能相关的崩溃。崩溃发生在下面一行。
mXYZActivityIntent.putExtra("ABC", 0);
我尝试在多个设备中重新创建它,上面的行完全没有问题。
堆栈下面是我唯一需要分析的东西。
android.os.BadParcelableException: ClassNotFoundException when unmarshalling: com.lahiruchandima.myApp.MyState
at android.os.Parcel.readParcelable(Parcel.java:2077)
at android.os.Parcel.readValue(Parcel.java:1965)
at android.os.Parcel.readMapInternal(Parcel.java:2226)
at android.os.Bundle.unparcel(Bundle.java:223)
at android.os.Bundle.putInt(Bundle.java:443)
at android.content.Intent.putExtra(Intent.java:5393)
at com.lahiruchandima.myApp.MyActivity.undo(MyActivity.java:492)
at com.lahiruchandima.myApp.MyActivity$6.onClick(MyActivity.java:321)
at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:169)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5392)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
上面的 com.lahiruchandima.myApp.MyState
是一个实现Parcellable
的类。它的一个对象也存储在mXYZActivityIntent
中。好像android无法从MyState
mXYZActivityIntent
我搜索了这个BadParcelableException
,正如我所理解的,这与类加载器有关。但我无法弄清楚我做错了什么。
有人可以告诉我哪些可能出错?