在androidx.appcompat:appcompat:1.1.0中找不到LocalBroadcastManager,但在1.0.0中可用

时间:2019-11-01 16:08:24

标签: android androidx localbroadcastmanager

我刚刚通过Android Studio中的选项Refactor -> Move to Androidx迁移到了androidx。 默认情况下,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 个答案:

答案 0 :(得分:2)

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 release notes

  

androidx.localbroadcastmanager在版本1.1.0-alpha01中已弃用。

     

原因

     
      
  • LocalBroadcastManager是应用程序范围的事件总线,在您的应用程序中包含违反层的行为;任何组件都可以侦听来自任何其他组件的事件。
  •   
  • 它继承了系统BroadcastManager的不必要用例限制;开发人员必须使用Intent,即使对象只生活在一个进程中,也永远不要离开它。出于同样的原因,它也不遵循功能性BroadcastManager
  •   
     

这些使开发人员感到困惑。

     

替换

     

您可以将LocalBroadcastManager的用法替换为可观察模式的其他实现。根据您的使用情况,合适的选项可能是LiveData或反应性流。