【问题标题】:Android Parcelable Takes Up More MemoryAndroid Parcelable 占用更多内存
【发布时间】:2012-07-13 16:47:42
【问题描述】:

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

上下文。

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

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

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

(虽然我目前正在销毁任何重新创建的片段,因为重新附加到正确的视图存在一些奇怪的问题,另一个帖子)。

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

【问题讨论】:

    标签: java android memory parcelable parcel


    【解决方案1】:

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

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

    我还读到,您应该避免将参数传递给片段构造函数,因为它可能会使用默认的无参数构造函数重新创建。

    正确。

    另一种方法是在ArrayList中传递对象的索引。然后使用 getActivity().myList.get(传递给的整数)从片段中获取对数组列表的引用。但这对我来说似乎不太安全(ArrayList 的内容可能会发生变化,尽管我只是删除了所有内容并重新开始)。

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

    【讨论】:

    • 这就是我之前的处理方式。只是希望为 i
    • 我已经尝试过这种方法,但是一旦手机旋转,片段就会比活动更快地调用 onCreate。所以对象尚未初始化。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-17
    • 2017-09-01
    • 1970-01-01
    • 2015-04-13
    • 1970-01-01
    • 2014-09-20
    相关资源
    最近更新 更多