android - LocalBroadcastManager 已被弃用。我应该用什么代替它?

标签 android service android-livedata localbroadcastmanager

我正在 Android 中处理这个项目,其中一个方面需要一个带有前台服务的 CountdownTimer。 Stack Overflow 上的其他一些答案提到 LocalBroadcastManager 将适合我的需求。

但是,Android Developers 中的文档提到它已被弃用。关于我应该使用什么来代替它的任何建议?提到使用 LiveData 的文档,但我想知道是否有更简单的替代方案。

最佳答案

LocalBroadcastManager基本上是 event bus在 Intent 和 Intent 过滤器周围有很多不必要的仪式。所以一个替换很容易,并且功能非常相似:您可以使用任何事件总线库。 greenrobot's EventBus是一个流行的选择 (here's a guide for it) 和 Guava also has one ,如果您已经在使用 Guava(但 Guava 非常重,仅用于事件总线)。

但是事件总线遇到了与 LocalBroadcastManager 相同的问题,导致它被弃用:它是全局的,它不是生命周期感知的,并且随着您的应用程序变得越来越大,推断事件更改的影响变得更加困难.对于观测数据的情况, LiveData 很好地解决了这个问题,因为它具有生命周期感知能力,因此您不会在错误的时间收到更改通知(例如在设置 View 之前或之后 onSaveInstanceState ) - 但它会在您处理时发送更改通知再次处于正确的状态。它的范围也更紧密 - 每个 LiveData 都是单独访问的,而不是(通常)为整个应用程序提供一个事件总线/LocalBroadcastManager。

对于更多是事件而不是更改数据的情况,您有时可以将其转换为数据。考虑您是否有“登录”和“注销”事件 - 您可以改为创建一个 LiveData 来存储登录用户的帐户,并在用户注销时变为空。然后组件可以观察到这一点。

在某些情况下,确实很难将其转换为可观察数据(尽管我无法立即想到通常与事件总线模式一起使用的任何示例)。对于那些,考虑编写自己的监听器界面,类似于点击监听器的工作方式。

对于您的倒数计时器示例,我认为 LiveData 是一个非常简单的解决方案,并且比事件总线甚至 LocalBroadcastManager 更容易。您可以只拥有计时器当前值的 LiveData,并从需要显示该值的任何内容中订阅它。

关于android - LocalBroadcastManager 已被弃用。我应该用什么代替它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61484995/

相关文章:

android - 如何在Xamarin.Android中创建实时数据?

android - 事件总线 : How to deal with no clear unsubscribe point?

android - 检查屏幕位置改变了多少appium android

android - Android 4.4 工具栏菜单项不可点击 (19)

android - 如何在不同进程中建立Activity和Service之间的双向通信?

android - 永不过时的服务

java - 改造、实时数据适配器、使响应类包装器通用?

java - 如何从 MVVM 架构中的 Web 服务存储库类与 Activity/Fragment 进行通信

android - 如何存储 hashmap 以便在设备重启后保留它的值?

c# - 两个日期之间的房间可用性(初学者)