首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在应用程序升级期间,Android活动instanceState是否已被清除?

在应用程序升级期间,Android活动instanceState是否已被清除?
EN

Stack Overflow用户
提问于 2015-09-14 11:56:52
回答 2查看 168关注 0票数 9

在活动的instanceState中,我们存储可序列化(bundle.putSerializable)。在Play Store的崩溃报告中,我们看到了以下堆栈跟踪:

代码语言:javascript
复制
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的应用程序?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-23 11:46:20

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

票数 1
EN

Stack Overflow用户

发布于 2015-09-18 09:15:04

据我所知,当活动被完全破坏时,系统恢复其状态的唯一条件是系统必须销毁该活动才能恢复系统内存。在所有其他情况下(强制进程停止,重新安装应用程序,重新启动设备)状态丢失。

关于重新安装,您必须考虑到,当您安装新版本的应用程序时,您可能已经更改或删除了一个或多个活动,而旧活动的状态可能与新活动的状态不匹配。例如,假设在单个活动应用程序中,有一个id为"@+id/my_text“的TextView。几天后,您决定删除TextView并将id "my_text“分配给另一个视图--例如,一个旋转器:系统如何在一个旋转器中恢复TextView的文本?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32564217

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档