2

几天前,我读到有一种更好的机制可以在单个应用程序中发送广播 - LocalBroadcastManager.

它运作良好(就像标准广播一样..)。但是,昨天我发现它无法向清单中定义的接收器发送广播(当我暂时将其切换为使用标准 Activity 的sendBroadcast方法时,它起作用了)。

我想要这个的原因(如果有更喜欢的方法,请纠正我)是:

假设我想下载一个文件。我将使用服务,因为这就是 Android 希望我们做的事情。好的,现在我想在我的活动中显示(并定期更新)它的进度。所以服务将向我的活动发送广播,并且活动必须注册才能接收它们。处理广播的首选方法是在 中注册onResume()和注销onPause()。现在让我们假设用户对缓慢移动的进度条感到厌烦,所以他按下 Home 并去做其他事情。后来他回来想看看下载的当前状态,但我怎么能告诉他,当我从广播中注销时,他离开我的应用程序的那一秒?

这就是为什么我使用清单中定义的接收器,随时准备接收广播并将其永久存储(共享首选项,数据库......),因此活动可以在它变得可见时重建最新的广播。

但是现在我不确定是否不推荐此例程,或者为什么LocalBroadcastManager不允许我这样做。

4

1 回答 1

0

如果您使用 SharedPreferences 解决方法是让您的活动实施OnSharedPreferenceChangeListener。因此,服务写入首选项,活动侦听更改并更新进度条。onResume()您还可以检查首选项并相应地更新 UI。

这样做的好处是,如果您未能取消注册它们,您实际上并没有泄漏 - 请参阅 Android:OnSharedPreferenceChangeListener 应该在哪里定义/注册- 我更喜欢取消注册,onDestroy()因为我想更新我的活动,即使不在前景 - 即使onDestroy没有被调用,听众也会离开。

至于为什么它不适用于清单注册接收器 - 你能发布一些代码吗?你真的用 LBM 注册接收器吗?

于 2013-12-24T21:12:25.980 回答