Android : Application is crashing when moving to background
我面临的问题是,当我在应用程序处于前台时按下Home按钮,那么应用程序将因引发AppCompat不可序列化异常而崩溃。这是异常的stacktrace。请提出解决方案。我没有使用任何不可序列化的自定义数据类型。这是导致问题的Android视图
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | FATAL EXCEPTION: main java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = com.test.XYZFragment) at android.os.Parcel.writeSerializable(Parcel.java:1285) at android.os.Parcel.writeValue(Parcel.java:1233) at android.os.Parcel.writeMapInternal(Parcel.java:591) at android.os.Bundle.writeToParcel(Bundle.java:1646) at android.os.Parcel.writeBundle(Parcel.java:605) at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:137) at android.os.Parcel.writeTypedArray(Parcel.java:1102) at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:385) at android.os.Parcel.writeParcelable(Parcel.java:1254) at android.os.Parcel.writeValue(Parcel.java:1173) at android.os.Parcel.writeMapInternal(Parcel.java:591) at android.os.Bundle.writeToParcel(Bundle.java:1646) at android.os.Parcel.writeBundle(Parcel.java:605) at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2613) at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3232) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) 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:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method) Caused by: java.io.NotSerializableException: android.support.v7.widget.AppCompatAutoCompleteTextView at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1364) at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) at java.io.ObjectOutputStream.writeFieldValues(ObjectOutputStream.java:979) at java.io.ObjectOutputStream.defaultWriteObject(ObjectOutputStream.java:368) at java.io.ObjectOutputStream.writeHierarchy(ObjectOutputStream.java:1074) at java.io.ObjectOutputStream.writeNewObject(ObjectOutputStream.java:1404) at java.io.ObjectOutputStream.writeObjectInternal(ObjectOutputStream.java:1671) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1517) at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:1481) at android.os.Parcel.writeSerializable(Parcel.java:1280) at android.os.Parcel.writeValue(Parcel.java:1233) at android.os.Parcel.writeMapInternal(Parcel.java:591) at android.os.Bundle.writeToParcel(Bundle.java:1646) at android.os.Parcel.writeBundle(Parcel.java:605) at android.support.v4.app.FragmentState.writeToParcel(Fragment.java:137) at android.os.Parcel.writeTypedArray(Parcel.java:1102) at android.support.v4.app.FragmentManagerState.writeToParcel(FragmentManager.java:385) at android.os.Parcel.writeParcelable(Parcel.java:1254) at android.os.Parcel.writeValue(Parcel.java:1173) at android.os.Parcel.writeMapInternal(Parcel.java:591) at android.os.Bundle.writeToParcel(Bundle.java:1646) at android.os.Parcel.writeBundle(Parcel.java:605) at android.app.ActivityManagerProxy.activityStopped(ActivityManagerNative.java:2613) at android.app.ActivityThread$StopInfo.run(ActivityThread.java:3232) at android.os.Handler.handleCallback(Handler.java:730) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:176) at android.app.ActivityThread.main(ActivityThread.java:5419) 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:1046) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:862) at dalvik.system.NativeStart.main(Native Method) |
在没有源代码的情况下,很难看到正在发生的事情,但我很清楚,您试图通过将一些对象作为
您不能将对活动的引用置于保存状态,因为这些活动是在应用程序外部管理的。即使您设法保存了活动的对象,当一个新的活动被创建并获得保存状态时,旧的活动现在就死了,而不是由系统管理,所以它对您来说是无用的。
如何修复代码取决于您试图保存的状态。如果需要保存活动内部的状态,则只需保存与对象其余部分分离的状态。
我搜索了一下,找到了一个解决方案,在移到后台时,默认情况下它调用方法
1 2 3 4 5 | @Override public void onSaveInstanceState(Bundle outState) { //Do not call super class method here. //super.onSaveInstanceState(outState); } |
检查此
android.support.v7.widget.AppCompatAutoCompleteTextView
检查您是否为