2016-05-27 8 views
2

Мы говорим Android здесь. Мы смоделировали нашу архитектуру с использованием подхода Model-View-Presenter, и мы затронули проблему относительно слабых ссылок.Нужно ли использовать значение WeakReference для циклической зависимости?

сверхбыстрой:

  • Presenter обрабатывает логику, сетевые вызовы и т.д.
  • Просмотров ручки, показывая данные на экране, отображая загрузку баров и т.д.

активность/Фрагмент классы имеют ссылку на ведущий . ведущий классы содержат ссылку на вид классы.

Наши вид clases фактически те интерфейсы, как правило, осуществляется с помощью деятельности/Фрагмент. Это означает круговую зависимость между Activity/Fragment -> presenter и presenter -> view (an Activity/Fragment). По этой причине мы сделали presenter держателем слабым эталоном до view (Activity/Fragment).

Сегодня нам нужно использовать 2 взгляды в том же Activity (для отображения различных моделей-данных), поэтому мы не implements он сделал на Activity но создал 2 анонимного класса. Это закончилось в presenter, потеряв ссылки view (потому что это слабая ссылка).

Сейчас мы оцениваем 2:

максимальных возможности
  1. Мы на самом деле не нужны presenters провести WeakReference на View причин этого типа круговой зависимости не будет утечкой памяти.
  2. Вместо использования анонимных классов мы держим ссылки на Activity (так что у обоих докладчиков и действий есть ссылка на просмотр) только ради этого не освобождается (что кажется вонючим).

Какая из них, нам нужен презентатор, чтобы удерживать представление в качестве слабой ссылки?

ответ

0

Ответ 1: вам не нужно иметь WeakReference в презентаторе в этом случае. Я использую тот же шаблон успешно. Не происходит утечки памяти - когда активность становится GCed, ведущий идет с ней. Но могут быть и другие типы проблем - если вы держите где-нибудь (например, в AsyncTask) твердую ссылку на ведущего.

0

Поскольку Галя уже указал, вам не нужен WeakReference для Presenter, потому что он будет уничтожен, если Activity уничтожен. Но если я правильно понимаю вашу проблему, вы пытаетесь «исправить» шаблон MVP. Возможно, вам может помочь шаблон VIPER?

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

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