应用升级期间是否清除了Android活动instanceState?

use*_*372 9 serialization android instancestate

在活动的instanceState中,我们存储了Serializable(bundle.putSerializable).在Play商店的崩溃报告中,我们看到了以下堆栈跟踪:

Caused by: java.lang.ClassNotFoundException: o.?
at java.lang.Class.classForName(Class.java)
at java.lang.Class.forName(Class.java:308)
at android.os.Parcel$2.resolveClass(Parcel.java:2373)
at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1641)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:657)
at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1782)
at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:761)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1983)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1940)
at android.os.Parcel.readSerializable(Parcel.java:2381)
Run Code Online (Sandbox Code Playgroud)

我们的代码被DexGuard混淆了.看起来Android能够序列化类但不能反序列化类.

我们目前可以想到的唯一原因是应用程序的升级(通过de Play商店).在版本之间,类被更改(因为Dexguard)使反序列化成为不可能.

所以,我的问题是:在升级应用程序期间,Android是否清除应用程序的所有instanceState?

woj*_*ski 1

如果自定义类有可能发生更改(即使只是 DexGuard 更改名称),则不应在保存的 instanceState 中包含自定义类。系统会保留有关最近活动的一些信息,并可能尝试在升级过程中重用它。