LocalBroadcastManager не найден в androidx.appcompat: appcompat: 1.1.0, но доступен в 1.0.0 - PullRequest
0 голосов
/ 01 ноября 2019

Я только что перешел на androidx через опцию Refactor -> Move to Androidx в Android Studio. По умолчанию файл build.gradle использовал:

implementation 'androidx.appcompat:appcompat:1.0.0'

Я использую LocalBroadcastManager во многих местах проекта. Я мог бы отлично использовать import androidx.localbroadcastmanager.content.LocalBroadcastManager с вышеупомянутым v1.0.0 из androidx.appcompat. Но когда я обновляю его до 1.1.0 как:

implementation 'androidx.appcompat:appcompat:1.1.0'

Импорт не работает. Я получаю Unresolved reference : localbroadcastmanager ошибку.

Я пытался очистить проект, а также пересобрать проект несколько раз, и проблема все еще существует.

Есть решение? Спасибо.

1 Ответ

2 голосов
/ 01 ноября 2019

AppCompat 1.0.0 имел транзитивную зависимость от legacy-support-core-utils (которая включает localbroadcastmanager для обеспечения точной совместимости с последним выпуском библиотеки поддержки 28.0.0.

AppCompat 1.1.0 удалил эту транзитивнуюзависимость и теперь зависит только от тех библиотек, которые ему нужны.

Поэтому, если вашему коду приложения все еще требуется LocalBroadcastManager, вам нужно вручную добавить зависимость от LocalBroadcastManager:

implementation "androidx.localbroadcastmanager:localbroadcastmanager:1.0.0"

Обратите внимание, чтов соответствии с примечаниями к выпуску LocalBroadcastManager 1.1.0-alpha01 :

androidx.localbroadcastmanager устарела в версии 1.1.0-alpha01.

Reason

  • LocalBroadcastManager - это шина событий всего приложения, охватывающая нарушения уровней в вашем приложении; любой компонент может прослушивать события от любого другого компонента.
  • Он наследует ненужное использование- ограничения системы BroadcastManager; разработчики должны использовать Intent, даже если объекты живут только в одном процессе и никогда не покидают его. По этой же причине он не следует функциональным возможностямe BroadcastManager.

Все это приводит к запутанному опыту разработчика.

Замена

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

...