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

Динамический широковещательный приемник в фрагменте

Возможно ли динамически регистрировать широковещательный приемник во фрагменте для прослушивания изменений состояния соединения? Если да, то как? Если нет, каковы некоторые обходные пути для фрагментов?

EDIT: для регистрации BroadcastReceiver вам нужен контекст. Поскольку фрагменты живут в рамках действий, вероятно, лучший способ получить контекст - это просто использовать getActivity(). Однако, как объясняет гнорсильва ниже, есть определенные особые случаи, которые нужно искать.

4b9b3361

Ответ 1

user853583 предложение хорошее, но если вам нужен доступ к контексту внутри фрагмента, вы должны использовать getActivity().getApplicationContext()

Вам следует избегать передачи активности как контекста, когда это возможно, поскольку это может привести к утечкам памяти - некоторый объект будет удерживать эту активность после вызова onDestroy() и не будет собираться мусором.

Сказав это, бывают случаи, когда вам нужно передать активность как контекст - например: для адаптеров списка

Еще две вещи:

  • потому что фрагмент прикреплен и отсоединен от действия, иногда getActivity() возвращает null - вы можете безопасно его называть внутри определенных методов жизненного цикла, когда вы знаете, что активность активна, например: onResume()

  • если ваш фрагмент не сохраняет свой экземпляр, то есть уничтожается при изменении ориентации, обязательно отмените регистрацию своего приемника в своем фрагменте, например, внутри onPause() или onDestroy()

Ответ 2

Насколько я вижу, нет способа зарегистрировать BroadcastReceiver во фрагменте. Для чего нужен вещательный приемник? Хорошим решением является упомянутый здесь

Ответ 3

Вы можете зарегистрировать широковещательный приемник следующим образом: getActivity(). registerReceiver (...