Архитектура Android Невозможно добавить одного и того же наблюдателя с разными жизненными циклами - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть приложение с MainActivity, которое запускает InvoiceActivity и запускает InvoicePaymentActivity, которое наконец запускает PaymentSuccessActivity.

Я начал использовать компоненты архитектуры, и, похоже, он работает нормально, но я обнаружил проблему при запуске MainActivity из PaymentSuccessActivity.

До сих пор я просто запускал новый Intent, и приложение «сбрасывало» его на главный экран. С помощью ViewModel я получаю сообщение «Невозможно добавить одного и того же наблюдателя с разными жизненными циклами».

Я нашел 2 решения, но не могу понять, какое из них лучше:

  1. Подписаться на наблюдателя в onResume, отписаться от onPause

  2. Завершите все предыдущие действия, кроме MainActivity, после запуска следующего. Поэтому, когда я только закончу PaymentSuccessActivity, пользователь будет включен в MainActivity. Это имеет недостаток пользовательской навигации назад ...

Но, похоже, я не могу снова добавить наблюдателя ... как я могу unsibscribe / подписаться? Мой код сейчас не работает ...

override fun onResume() {
    super.onResume()
    viewModel.intercom.observe(this, observer)  
}


override fun onPause() {
    super.onPause()
    viewModel.intercom.removeObserver { observer }
}

1 Ответ

0 голосов
/ 26 апреля 2018

Таким образом, вся эта проблема была основана на использовании анонимного класса Observer. Как только я создал свой класс наблюдателя, реализующий интерфейс наблюдателя, приложение начало нормально работать, без необходимости вручную наблюдать / удалять. Кто-нибудь может объяснить, почему это проблема?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...