LocalBroadcastManager устарел. Что я должен использовать вместо этого на своем месте? - PullRequest
2 голосов
/ 28 апреля 2020

Я работаю над этим проектом в Android, в котором аспект требует CountdownTimer с сервисом переднего плана. В нескольких других ответах о переполнении стека упоминалось, что LocalBroadcastManager подойдет для моих нужд.

В документации Android Разработчики, однако, упоминается, что она устарела. Любые предложения о том, что я должен использовать на своем месте? В документации упоминалось об использовании LiveData, но мне было интересно, есть ли более простые альтернативы.

1 Ответ

0 голосов
/ 29 апреля 2020

LocalBroadcastManager - это, по сути, шина событий с множеством ненужных церемоний, связанных с фильтрами намерений и намерений. Таким образом, одна замена проста и работает аналогично: вы можете использовать любую библиотеку шины событий. EventBus Greenrobot является популярным выбором ( вот руководство для него ) и Guava также имеет один , если вы уже используете Guava (но Guava довольно тяжелый включить только для шины событий).

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

Для случаев, когда речь идет о большем количестве событий, чем о части данных изменилось, иногда вы можете преобразовать его в кусок данных. Подумайте, есть ли у вас события «login» и «logout» - вместо этого вы можете создать LiveData, в котором хранится учетная запись для вошедших в систему пользователей, и она становится нулевой, когда пользователь выходит из системы. Компоненты могут наблюдать это.

Конечно, есть случаи, когда действительно трудно преобразовать их в фрагмент наблюдаемых данных (хотя я не могу сразу вспомнить какие-либо примеры, которые обычно используются с шиной событий). Паттен). Для них подумайте над написанием собственного интерфейса слушателя, аналогичного тому, как работают слушатели при нажатии.

Для вашего примера таймера обратного отсчета я думаю, что LiveData - это довольно простое решение, и оно будет намного проще, чем событие. шина или даже LocalBroadcastManager будет. Вы можете просто получить LiveData текущего значения таймера и подписаться на него из того, что нужно для отображения значения.

...