2016-02-18 6 views
1

Я хочу знать, является ли это хорошей практикой, а при использовании слабых ссылок - хорошая идея/плохая идея ...Передача слабой ссылки фрагмента на listadaptor, является ли это хорошей практикой?

При создании адаптера я передаю его (чтобы он мог перезвонить к фрагменту с помощью интерфейса, называемого «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."); 
    } 
} 

это хорошая практика, чтобы передать слабые ссылки фрагмента к адаптеру? Я хочу убедиться, что мое приложение максимально эффективно как память

ответ

0

Слабая ссылка используется, чтобы фрагмент был слабо связан. Если вы не используете слабую ссылку, это не будет сбор мусора, потому что фрагмент поддерживает ссылку на него.

Пока время жизни фрагмента находится в пределах срока действия Activity, тогда нет необходимости использовать WeakReference. Если фрагмент может жить дольше, чем Activity, тогда вы должны использовать WeakReference, чтобы избежать сохранения Activity в графе объектов, когда система уничтожает его.

+0

И, я думаю, фрагмент в этом случае будет всегда существовать до тех пор, пока listadaptor будет иметь ссылку на фрагмент. Значит, нет необходимости создавать слабую позицию? –

+0

Да, в этом конкретном случае он не нужен. Это необходимо только тогда, когда вам нужно реализовать слабо связанную архитектуру с запуском системного мусора. – Rakesh

 Смежные вопросы

  • Нет связанных вопросов^_^