在活动的instanceState中,我们存储可序列化(bundle.putSerializable)。在Play Store的崩溃报告中,我们看到了以下堆栈跟踪:
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可以序列化类,但不能反序列化类。
我们目前能想到的唯一原因是应用程序的升级(通过)。在该版本之间,类被更改(因为Dexguard),使得反序列化成为不可能的。
那么,我的问题是:在应用程序升级期间,安卓是否清除了所有instanceState的应用程序?
发布于 2015-09-23 11:46:20
如果保存的instanceState可能会更改这些类,则不应该在这些类中包含自定义类(即使只是DexGuard对名称进行洗牌)。该系统保存了一些有关最近活动的信息,并可能尝试在升级过程中重用它。
发布于 2015-09-18 09:15:04
据我所知,当活动被完全破坏时,系统恢复其状态的唯一条件是系统必须销毁该活动才能恢复系统内存。在所有其他情况下(强制进程停止,重新安装应用程序,重新启动设备)状态丢失。
关于重新安装,您必须考虑到,当您安装新版本的应用程序时,您可能已经更改或删除了一个或多个活动,而旧活动的状态可能与新活动的状态不匹配。例如,假设在单个活动应用程序中,有一个id为"@+id/my_text“的TextView。几天后,您决定删除TextView并将id "my_text“分配给另一个视图--例如,一个旋转器:系统如何在一个旋转器中恢复TextView的文本?
https://stackoverflow.com/questions/32564217
复制相似问题