将全局BroadcastReceiver迁移到LocalBroadcastManager

时间:2012-06-09 10:47:10

标签: android

我正在将清单中定义的一些BroadcastReceiver迁移到LocalBroadcastManager

不需要从其他应用调用这些BroadcastReceiver。 它们通过sendBroadcast()Activity调用以响应UI操作,或者从执行HTTP请求并在Intent中传递响应的实用程序类调用。

我最近才发现LocalBroadcastManager并希望优化我的代码。我没有做任何基准测试(我不确定如何)。是值得做还是过早优化?调用BroadcastReceiver以响应用户操作,因此迁移可能不值得。

registerReceiver注册应该在哪里完成? Application是正确的位置吗?

1 个答案:

答案 0 :(得分:1)

  

registerReceiver注册应该在哪里?

他们应该由负责他们工作的任何组成部分进行注册。

主要是,LocalBroadcastManager用于组件间通信。典型的例子是IntentService发送本地广播Intent,让任何感兴趣的活动知道某些事情发生了变化......当且仅当前台有这样的活动时。在这种情况下,活动将在onResume()中注册一个接收者,并在onPause()中取消注册该接收者。

所以,让我们看看你的两个轻微描述的“用例”:

  来自活动的

以响应UI操作

删除sendBroadcast()。删除BroadcastReceiver。只需在这里完成工作,或者分叉AsyncTask来完成工作,或通过IntentServicestartService()发送命令到工作。

  

来自执行HTTP请求并在Intent中传递响应的实用程序类。

活动(通过AsyncTask),IntentService或两者都不使用此“实用工具类”。

如果某个活动的AsyncTask正在使用该实用程序类,请转储sendBroadcast(),转储BroadcastReceiver,然后只需在AsyncTask中执行该工作即可/或活动。

如果IntentService正在使用实用程序类,并且您正在尝试根据该工作更新UI,那就是我在答案的第二段中概述的模式。