我正在Android的这个项目中工作,其中一个方面要求CountdownTimer和前台服务。关于堆栈溢出的其他一些答案提到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之前或在LiveData
之后)收到更改通知-但它当您再次处于正确状态时,将处理交付更改通知。它的作用域也更严格-分别访问每个LiveData片段,而不是(通常)为整个应用程序使用一个事件总线/ LocalBroadcastManager。
对于更多的是事件而不是要更改的数据的情况,有时可以将其转换为数据。考虑一下您是否具有“登录”和“注销”事件-您可以创建一个LiveData来存储一个用于已登录用户的帐户,并在用户注销时变为null。然后组件可以观察到这一点。
当然,在某些情况下,将其转换成可观察的数据确实非常困难(尽管我无法立即想到通常与事件总线模式结合使用的任何示例)。对于这些,请考虑编写自己的侦听器界面,类似于单击式侦听器的工作方式。
对于您的倒数计时器示例,我认为LiveData是一个非常简单的解决方案,它将比事件总线甚至LocalBroadcastManager都容易得多。您可以只拥有计时器当前值的LiveData,然后从需要显示该值的任何内容中订阅它。