是否可以在savedInstanceState

时间:2016-01-14 01:41:42

标签: android

在我的活动中,用户可以打开另一项活动。在应用程序工作流程中,用户在新打开的活动中执行某些任务后再次返回原始活动。

我有一个要求,需要在上次打开的状态下再次打开此其他活动。我目前通过在类变量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,正如我所理解的,这与类加载器有关。但我无法弄清楚我做错了什么。

有人可以告诉我哪些可能出错?

0 个答案:

没有答案