我正在将清单中定义的一些BroadcastReceiver
迁移到LocalBroadcastManager
。
不需要从其他应用调用这些BroadcastReceiver
。
它们通过sendBroadcast()
从Activity
调用以响应UI操作,或者从执行HTTP请求并在Intent
中传递响应的实用程序类调用。
我最近才发现LocalBroadcastManager
并希望优化我的代码。我没有做任何基准测试(我不确定如何)。是值得做还是过早优化?调用BroadcastReceiver
以响应用户操作,因此迁移可能不值得。
registerReceiver
注册应该在哪里完成? Application
是正确的位置吗?
答案 0 :(得分:1)
registerReceiver注册应该在哪里?
他们应该由负责他们工作的任何组成部分进行注册。
主要是,LocalBroadcastManager
用于组件间通信。典型的例子是IntentService
发送本地广播Intent
,让任何感兴趣的活动知道某些事情发生了变化......当且仅当前台有这样的活动时。在这种情况下,活动将在onResume()
中注册一个接收者,并在onPause()
中取消注册该接收者。
所以,让我们看看你的两个轻微描述的“用例”:
来自活动的以响应UI操作
删除sendBroadcast()
。删除BroadcastReceiver
。只需在这里完成工作,或者分叉AsyncTask
来完成工作,或通过IntentService
向startService()
发送命令到工作。
来自执行HTTP请求并在Intent中传递响应的实用程序类。
活动(通过AsyncTask
),IntentService
或两者都不使用此“实用工具类”。
如果某个活动的AsyncTask
正在使用该实用程序类,请转储sendBroadcast()
,转储BroadcastReceiver
,然后只需在AsyncTask
中执行该工作即可/或活动。
如果IntentService
正在使用实用程序类,并且您正在尝试根据该工作更新UI,那就是我在答案的第二段中概述的模式。