LocalBroadcastManager
- это, по сути, шина событий с множеством ненужных церемоний, связанных с фильтрами намерений и намерений. Таким образом, одна замена проста и работает аналогично: вы можете использовать любую библиотеку шины событий. EventBus Greenrobot является популярным выбором ( вот руководство для него ) и Guava также имеет один , если вы уже используете Guava (но Guava довольно тяжелый включить только для шины событий).
Но шины событий страдают от тех же проблем, что и LocalBroadcastManager, которые привели к тому, что он устарел: он глобальный, не учитывает жизненный цикл, и по мере того, как ваше приложение становится больше, оно становится все труднее рассуждать о последствиях изменения события. Для случаев наблюдения данных, LiveData
решает это довольно хорошо, потому что он учитывает жизненный цикл, поэтому вы не будете получать уведомления об изменениях в неправильное время (как до настройки View или после * 1015). *) - но он будет обрабатывать доставку уведомлений об изменениях, когда вы снова в нужном состоянии. Кроме того, он более узко ограничен - каждый фрагмент LiveData доступен отдельно, а не имеет (как правило) одну шину событий / LocalBroadcastManager для всего приложения.
Для случаев, когда речь идет о большем количестве событий, чем о части данных изменилось, иногда вы можете преобразовать его в кусок данных. Подумайте, есть ли у вас события «login» и «logout» - вместо этого вы можете создать LiveData, в котором хранится учетная запись для вошедших в систему пользователей, и она становится нулевой, когда пользователь выходит из системы. Компоненты могут наблюдать это.
Конечно, есть случаи, когда действительно трудно преобразовать их в фрагмент наблюдаемых данных (хотя я не могу сразу вспомнить какие-либо примеры, которые обычно используются с шиной событий). Паттен). Для них подумайте над написанием собственного интерфейса слушателя, аналогичного тому, как работают слушатели при нажатии.
Для вашего примера таймера обратного отсчета я думаю, что LiveData - это довольно простое решение, и оно будет намного проще, чем событие. шина или даже LocalBroadcastManager будет. Вы можете просто получить LiveData текущего значения таймера и подписаться на него из того, что нужно для отображения значения.