Android的碎片保存数据(Android Fragments Retaining Data)

2019-06-26 20:23发布

怎样才能最好的一个片段中保持数据作为其活动将经历一个的onCreate /销毁周期像旋转?

在我们的设置,我们必须从我们的服务器加载到片段自定义列表适配器潜在的大名单,我们希望通过不使它们旋转重装理顺UX。 我们曾与设置片段retainInstance =真正的问题; 是我们的适配器有原来的活动的上下文的引用,因此会造成内存泄漏。 难道我们只是将数据存储在片段并重新创建适配器; AMD如果是的话是真的正确的做法?

接下来的想法是将数据存储到一个会话单对象,并呈现陈旧数据的一些问题旋转后取回,但我们可以很容易地克服。

另一种选择我看到的,好像它是*最好的解决办法,是将数据保存到一个包,并还原成旋转后的新片段; 但是,我们有很会需要几个对象存储整个应用程序和我们的一些对象是复杂的,包含列表,多种类型,并且将是一个痛苦,使parcelable。 有没有更好的解决办法还是我们不得不硬着头皮让他们Parcelable?

Answer 1:

只是防止活动从旋转(等)重建本身。 加

android:configChanges="keyboardHidden|orientation|screenSize"

在AndroidManifest.xml中的活动定义。 那么就没有必要节省旋转什么。

编辑:

如果你不喜欢这种解决方案,然后你有没有选择,只能使用机制的onSaveInstanceState。 如果你有复杂的数据,只是让你的类序列化,并将其添加到捆绑的方式。



Answer 2:

设置

机器人:configChanges

在Android清单属性是禁用默认的破坏,和重建行为hackiest和滥用最广泛的解决方法。

查看更多有关,在

处理与片段配置更改

http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html



Answer 3:

根据http://developer.android.com/guide/topics/resources/runtime-changes.html,you完全可以在片段,只要它不与活性,视图等束相关联的保存数据真的并不意味着沉重的数据和序列化的速度很慢,所以片段是理想的大量数据。

它可能无法为你完全恢复同捆的活动状态,该系统节省了您的的onSaveInstanceState()回调,它的目的不是要携带大型物体(如位图),并在数据中必须被序列化然后反序列化,这会消耗大量的内存和使配置变化缓慢。 在这种情况下,您可以减轻重新初始化通过保留片段重新启动你的活动时,你的活动的负担,由于配置的改变。 这个片段可以包含对要保留状态的对象引用。



文章来源: Android Fragments Retaining Data