Подтвердить что ты не робот

Какие методы жизненного цикла активности лучше всего регистрировать/отменять регистрацию на шине событий?

Какое лучшее место для регистрировать и отменять регистрацию на шине событий (например, otto, EventBus или tinybus) в Activity и почему?

  • OnCreate() - OnDestroy()
  • OnStart() - OnStop()
  • onResume() - OnPause()

В примере Отто используется onResume() - onPause(), EventBus упоминает onStart() - onStop(), и нам нужно использовать onCreate() - onDestroy() в нашем приложении, чтобы обновить интерфейс активности, даже если он был в задний план. Поэтому я думаю, что это может быть любой из трех в зависимости от характера событий и их обработки, но мне было интересно, есть ли что-то еще, что нужно учитывать.

4b9b3361

Ответ 1

@levavare, я думаю, правильное время для регистрации/отмены регистрации зависит от ваших событий и от того, что вы намерены делать с ними. И могут быть разными для разных событий в одном приложении.

Например, я использую EventBus в Android-приложении, которое контролирует устройство регистрации данных в реальном времени (в данном случае Arduino) через Bluetooth. У меня два совершенно разных типа событий.

Первое событие отправлено моим кодом Bluetooth, чтобы уведомить один из моих фрагментов о том, что с устройства был получен новый набор показаний прибора. Затем этот фрагмент записывает их в таблицу базы данных. Важно, чтобы событие всегда слушалось и действовало. Фрагмент регистрирует/отменяет регистрацию в методах OnCreate/OnDestroy. Я также подписался на это событие с повышенным приоритетом.

Другое событие публикуется слоем базы данных, когда новая запись добавляется в базу данных. У меня есть серия фрагментов, которые показывают разные подмножества отсчетов (температуры, давления, условия тревоги). Когда один из этих фрагментов просматривается, он должен обновляться, как только новое чтение находится в базе данных. Но когда этот фрагмент скрыт из виду, нет никаких оснований для его действия над чтением. У меня эти фрагменты регистрируются/регистрируются в OnStart/OnStop. Я собирался сделать эту работу в OnResume/OnPause, и, честно говоря, я думаю, что это будет работать и для моего приложения. Но @Jordy ответ и ссылка убедили меня пойти с OnStart/OnStop вместо этого.

Ответ 2

Прежде всего, это не объективный вопрос, а скорее его субъективный и будет содержать множество аргументов, основанных на аргументах.

Из моего опыта, Мы использовали Otto в одном из наших проектов. Мы следовали onResume() - onPause(), которые нам очень понравились. Это также имеет смысл, потому что мы должны зарегистрироваться как можно позже и отменить регистрацию как можно быстрее при использовании шины событий.

Ответ 3

Я удалил свой комментарий в приведенном выше ответе, что было бы лучше зарегистрировать/отменить регистрацию в onresume/onpause. У меня странный usecase, где некоторые, если мои события не достигнут аннотированного абонента. Кажется, лучший способ - использовать onstart/onstop. Вот хорошая публикация SO, объясняющая почему:

fooobar.com/info/278161/...