Android Parcelable占用更多内存

时间:2012-07-13 16:47:43

标签: java android memory parcelable parcel

问题很简单,如果我将一个对象设为parcelable,并将其放入一个包中并使用该包创建一个片段。该对象是否被克隆或被引用。

背景。

我在ArrayList中存储/引用了一个对象。取决于ArrayList中的对象类型(使用多态)。我创建了一个适合处理它的片段。

我还需要将此对象传递给片段。该片段在自定义视图寻呼机中使用。我不希望有重复的对象,在我看来,可以克隆的克隆对象。

另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(传递给Integer)从片段中获取对arraylist的引用。但它对我来说似乎不太安全(ArrayList内容可能会改变,虽然我只是删除所有内容并重新开始)。我还读过,你应该避免将参数传递给片段构造函数,因为它可以使用默认的no-args构造函数重新创建。

(虽然我正在销毁任何重新创建的片段,因为重新连接到正确的视图会有一些奇怪的问题,另一篇文章)。

新的子问题:有没有办法通过引用片段来传递值?

1 个答案:

答案 0 :(得分:5)

  

问题很简单,如果我将一个对象设为parcelable,并将其放入一个包中并使用该包创建一个片段。该对象是否被克隆或被引用。

如果没有立即克隆,可能会在其他时间点克隆(例如,当片段的参数Bundle包含在实例状态中时)。

  

我还读过,你应该避免将参数传递给片段构造函数,因为它可以使用默认的no-args构造函数重新创建。

正确。

  

另一种方法是传递ArrayList中对象的索引。然后使用getActivity()。myList.get(传递给Integer)从片段中获取对arraylist的引用。但它对我来说似乎不太安全(ArrayList内容可能会改变,虽然我只是删除所有内容并重新开始)。

不要使用ArrayList。使用带有持久密钥的HashMap。将密钥传递给片段。让片段通过密钥获取数据。确保删除此对象的任何人(从而将其从HashMap中删除)仅在此片段不存在时才这样做,或者通知此片段以便它知道如何处理此场景。