Android 是否可绘制可序列化或有时?

Android 是否可绘制可序列化或有时?,android,serialization,drawable,Android,Serialization,Drawable,我对序列化有问题 我有一个HomeHolder对象,它为我的HomeFragment保留了一些数据。 HomeHolder由1个字符串、2个字符串HashMap的ArrayList和1个MediaHolder对象组成,MediaHolder对象包含2个字符串和2个Drawable 当我旋转我的设备时,我想恢复我的家庭成员中包含的数据。因此,我尝试在我的HomeHolder和MediaHolder中实现可序列化接口。我很确定Drawable是不可序列化的,但是让我们试试 我将我的HomeHolde

我对序列化有问题

我有一个HomeHolder对象,它为我的HomeFragment保留了一些数据。 HomeHolder由1个字符串、2个字符串HashMap的ArrayList和1个MediaHolder对象组成,MediaHolder对象包含2个字符串和2个Drawable

当我旋转我的设备时,我想恢复我的家庭成员中包含的数据。因此,我尝试在我的HomeHolder和MediaHolder中实现可序列化接口。我很确定Drawable是不可序列化的,但是让我们试试

我将我的HomeHolder作为可序列化对象放在保存我的HomeFragment的活动的saveInstanceState方法包中(是的,我需要在该HomeFragment的其他片段中使用此HomeHolder,以便将其保留在我的活动中),并使用onRestoreInstanceState还原它

好了,现在我将轮换我的家庭片段并惊喜地说:它成功了!!(别问我为什么)。这些数据不是从web加载的,而是从活动持有的“我的住户”中恢复的。 现在,我单击一个启动新活动的ImageView(例如)。哦,令人惊讶的是:应用程序崩溃。。。我的Mediaholder中的可绘制对象似乎无法序列化

所以我的问题是:Drawable是可序列化的、不可序列化的还是有时可序列化的

(我可以给您一些代码,但它是无用的:它们只是带有getter/setter和经典onSave/onRestore实现的经典对象)

编辑:我在调试器中看到,当我旋转或单击imageview时,我的HomeHolder对象完全相同。任何内容都不为空。

您不应在其所有者活动的生命周期结束后保留可提取内容,请参阅相关内容:

注意:虽然您可以返回任何对象,但决不能传递 绑定到活动的对象,例如可绘制、适配器、 视图或与上下文关联的任何其他对象。如果你这样做, 它将泄漏原始活动的所有视图和资源 例如。(泄漏资源意味着您的应用程序维护 抓紧它们,它们就不能被垃圾收集,所以内存很大 可能会丢失。)

正确的方法是只保存屏幕状态,并使用屏幕状态重新创建新屏幕,然后重新加载其余数据。对于web加载的数据,可以将其保存为内存中的原始数据或位图缓存。位图和可绘制位图的最大区别在于位图不与任何上下文绑定,因此可以在任何地方使用


关于提高屏幕旋转速度的方法,请查看谷歌博客:

是的,我想我不应该。。。这只是一次尝试,我会按照你的方式去做,但我不明白为什么它是在轮换,而不是在我离开活动时。答案和详细信息的Thx:)