Java 将弱片段引用传递给ListAdapter,这是一个好做法吗?

Java 将弱片段引用传递给ListAdapter,这是一个好做法吗?,java,android,android-fragments,weak-references,Java,Android,Android Fragments,Weak References,我想知道这是否是一种好的做法,当使用弱引用是一个好主意/坏主意时 在创建适配器时,我将对片段的弱引用传递给它(以便它可以使用一个名为“EmailOrdersButton”的接口回调片段): WeakReference<OrderHistoryListFragment> weakFragment = new WeakReference<OrderHistoryListFragment>(OrderHistoryListFragment.this); adapter = n

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

在创建适配器时,我将对片段的弱引用传递给它(以便它可以使用一个名为“EmailOrdersButton”的接口回调片段):

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

adapter = new OrderHistoryListAdapter(getActivity(), R.layout.order_history_list_item, -1, orderHistory, isInEditMode, weakFragment);
WeakReference weakFragment=新的WeakReference(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.");
    }
}
public OrderHistoryListAdapter(上下文mContext、int-resource、int-textViewResourceId、List-lastTransactionList、布尔isEditModeEnable、WeakReference-weakFragment){
mInflator=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
这个资源=资源;
this.context=mContext;
this.lastTransactionList=lastTransactionList;
originalList=this.lastTransactionList;
this.isEditModeEnable=isEditModeEnable;
试一试{
this.emailButtonCallback=((EmailOrdersButton)weakFragment.get());
}catch(ClassCastException e){
抛出新的ClassCastException(“片段必须实现EmailOrdersButton”);
}
}

将片段的弱引用传递给适配器是否是一种好的做法?我想确保我的应用程序尽可能节省内存

使用弱引用,以便片段松散耦合。如果不使用弱引用,它将不会被垃圾收集,因为片段维护对它的引用


只要片段的生存期在活动的生存期内,就不需要使用WeakReference。如果片段的寿命比活动长,则应使用WeakReference,以避免在系统销毁活动时将其保留在对象图中。

使用弱引用,使片段松散耦合。如果不使用弱引用,它将不会被垃圾收集,因为片段维护对它的引用


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

我猜在这种情况下,片段将始终存在,只要ListAdapter引用片段,它就会存在。因此不需要创建weakreference?是的,在这个特定场景中不需要它。只有当您需要实现松散耦合的体系结构并执行系统垃圾时,才需要它。我猜在这种情况下,只要ListAdapter引用了片段,片段就会一直存在。因此不需要创建weakreference?是的,在这个特定场景中不需要它。只有当您需要实现松散耦合的体系结构并执行系统垃圾时,才需要它。