В документации Android не прописано ни одного места для регистрации / отмены регистрации приемников вещания, но упоминает и onStart()
/ onStop()
, и onResume()
/ onPause()
в качестве возможностей.
Самый важный фактор при принятии этого решения - когда ваш приемник должен уметь выполнять свою работу?Это будет определять, когда регистрировать и отменять регистрацию.
Нужно ли приемнику что-то делать с трансляцией только тогда, когда активность находится в фокусе?Если это так, вы можете зарегистрировать / отменить регистрацию в onPause()
/ onReceive()
.(Вы также можете использовать более длительный срок службы, такой как onStart()
/ onStop()
, но затем вы должны проверить на приемнике onReceive()
, находится ли действие в фокусе.)
Приемник должен что-то делать, когда он виден, даже если у него нет фокуса (например, когда отображается диалог)Если это так, используйте onStart()
/ onStop()
(или более длительный срок службы, но, опять же, onReceive()
получателя должен проверить, видна ли активность).
Нужен ли получателюузнать о трансляции, даже если активность не видна?Например, нужно ли помнить, что что-то произошло, чтобы, когда действие стало видимым, оно могло отражать итоговое состояние дел?Затем вам нужно использовать onCreate()
/ onDestroy()
для регистрации / отмены регистрации.(Обратите внимание, что существуют и другие способы реализации такого рода функций.)
Если вы регистрируетесь в onStart()
, не регистрируйте их также в onResume()
, потому что это будет избыточно: onResume()
никогда не вызывается без вызова onStart()
первым.
Также имейте в виду, что лучше всего поддерживать onPause () как можно более легким :
Выполнение onPause () очень короткое и не обязательно дает достаточно времени для выполнения операций сохранения.По этой причине вам не следует использовать onPause () для сохранения данных приложения или пользователя, выполнения сетевых вызовов или выполнения транзакций базы данных;такая работа может не завершиться до завершения метода.Вместо этого вы должны выполнять операции отключения при большой нагрузке во время onStop ().
Это правда, что onDestroy()
это , гарантированно не будет вызван , если система убивает ваш процесс в порядкечтобы сохранить память.Однако, если процесс убит, процесс все равно не будет получать трансляции.В таком случае, действительно ли необходимо отменить регистрацию вещательных приемников?