将弱片段引用传递给listadaptor,这是一个好习惯吗?

时间:2016-02-18 10:42:56

标签: java android android-fragments weak-references

我想知道这是不是很好的做法,当使用弱引用时,这是一个好主意/坏主意......

创建适配器时,我传递它(因此它可以使用名为" EmailOrdersButton"的接口回调片段)对片段的弱引用:

WeakReference<OrderHistoryListFragment> weakFragment = new WeakReference<OrderHistoryListFragment>(OrderHistoryListFragment.this);

adapter = new OrderHistoryListAdapter(getActivity(), R.layout.order_history_list_item, -1, orderHistory, isInEditMode, weakFragment);

然后在我的适配器构造函数中,我有这个:

public OrderHistoryListAdapter(Context mContext, int resource, int textViewResourceId, List<MOHistory> lastTransactionList, boolean isEditModeEnable, WeakReference weakFragment) {
    mInflator = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    this.resource = resource;
    this.context = mContext;
    this.lastTransactionList = lastTransactionList;
    originalList = this.lastTransactionList;
    this.isEditModeEnable = isEditModeEnable;

    try {
        this.emailButtonCallback = ((EmailOrdersButton) weakFragment.get());
    } catch (ClassCastException e) {
        throw new ClassCastException("Fragment must implement EmailOrdersButton.");
    }
}

将片段的弱引用传递给适配器是不错的做法?我想确保我的应用程序尽可能保持内存效率

1 个答案:

答案 0 :(得分:0)

使用弱引用以使片段松散耦合。如果您不使用弱引用,则不会对其进行垃圾回收,因为该片段会保留对它的引用。

只要片段的生命周期在Activity的生命周期内,就不需要使用WeakReference。如果片段的活动时间比活动长,那么您应该使用WeakReference来避免在系统销毁时保留对象图中的Activity。