Компонент архитектуры Android MVP и жизненного циклаAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Компонент архитектуры Android MVP и жизненного цикла

Сообщение Anonymous »

Я новичок и пытаюсь объединить MVP с компонентом архитектуры жизненного цикла.

Хорошо известно, что вам следует присоединять и отключать VIEW от PRESENTER при запуске и остановке, чтобы избежать памяти. утечки. Но LifecycleOwner/LifecycleObserver не может работать, если представление подключено к Presenter...

В целях обучения я создаю простое приложение (M)VP, представление прикрепляется к Presenter и отключается от него. в методах onStart() и onStop(). Он работает нормально.

После этого я конвертирую Presenter в LifecycleObserver, подписываю его на события LifecycleOwner (LifecycleOwner — это View) и удаляю методы onStart()/onStop() из View. В этом случае приложение аварийно завершает работу при запуске.

Просмотреть класс (v1):

Код: Выделить всё

public class MyView extends AppCompatActivity {

private final static String TAG = "myLogs";
MyPresenter myPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "CREATE");
setContentView(R.layout.activity_main);
myPresenter = new MyPresenter();
}

@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "START");
myPresenter.linkView(this);
}

@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "STOP");
myPresenter.unlinkView();
}
}
Класс Presenter (v1):

Код: Выделить всё

class MyPresenter {

private final static String TAG = "myLogs";
MyView view;

public void linkView(MyView v) {
Log.d(TAG, "linkView()");
this.view = v;
}

public void unlinkView() {
Log.d(TAG, "unlinkView()");
this.view = null;
}
}
Это отлично работает.

А затем я пытаюсь добавить компонент архитектуры жизненного цикла следующим образом:

Просмотр класса (v2):

Код: Выделить всё

public class MyView extends AppCompatActivity {

private final static String TAG = "myLogs";
MyPresenter myPresenter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "CREATE");
setContentView(R.layout.activity_main);
myPresenter = new MyPresenter();
getLifecycle().addObserver(myPresenter);
}
}
Класс Presenter (v2):

Код: Выделить всё

class MyPresenter implements LifecycleObserver {

private final static String TAG = "myLogs";
MyView view;

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void linkView(MyView v) {
Log.d(TAG, "linkView()");
this.view = v;
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void unlinkView() {
Log.d(TAG, "unlinkView()");
this.view = null;
}
}
Различия:

Код: Выделить всё

1. I add "implements LifecycleObserver" to MyPresenter;
2. add start/stop annotations to MyPresenter methods;
3. remove onStart()/onStop() methods from MyView;
4. subscribe MyPresenter to MyView lifecycle events in onCreate() method.
Результат:

В результате приложение вылетает при запуске со следующим исключением ошибки. :


Невозможно начать действие MyView. Должен быть один и экземпляр LifecycleOwner


Ошибка возникает, если не связать представление с Presenter. Но это разрушает шаблон MVP. Итак, можно ли объединить шаблон MVP на Android с жизненным циклом?

Подробнее здесь: https://stackoverflow.com/questions/526 ... -component
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Компонент архитектуры Android MVP и жизненного цикла
    Anonymous » » в форуме Android
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • Как вручную протестировать события жизненного цикла приложения в эмуляторе Android?
    Anonymous » » в форуме Android
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Android ActivityInjector: получить исключение жизненного цикла после смены языка
    Anonymous » » в форуме Android
    0 Ответы
    30 Просмотры
    Последнее сообщение Anonymous
  • Запутайтесь и рухните на фрагменте жизненного цикла Android
    Anonymous » » в форуме Android
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Методы жизненного цикла Android не вызываются правильно
    Anonymous » » в форуме Android
    0 Ответы
    19 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»