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

前端之家收集整理的这篇文章主要介绍了在应用程序升级期间是否清除了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)

我们的代码被DexGuard模糊.
看起来Android是能够序列化该类,但不能反序列化该类.

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

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

解决方法

如果有任何机会,这些类将会更改(即使只有DexGuard改写名称),您不应该在已保存的instanceState中包含自定义类.系统会保留有关最近活动的一些信息,并可能会尝试在升级之间重用它们.

猜你在找的Android相关文章