Squonk..
25
A BroadcastReceiver可以在很多方面使用,但是当涉及更新a的UI组件这样的特定事物时Activity,声明/定义BroadcastReceiver其自己的Java类文件几乎没有什么优势.
推理 - BroadcastReceiver必须具有一些先前的"知识" Activity以及为了更新UI而需要做什么.实际上,BroadcastReceiver它与Activity自身联系在一起,将它声明/定义为内部类是有意义的.
另一个重要方面是Activity需要处于"运行"(即可见)状态以保证UI组件的操作.在这种情况下,注册接收器onResume()和取消注册onPause()将有助于防止出现问题.
使用通用模板我会做类似以下的事情......
class MyActivity extends Activity {
boolean mIsReceiverRegistered = false;
MyBroadcastReceiver mReceiver = null;
// onCreate(...) here
@Override
protected void onResume() {
// Other onResume() code here
if (!mIsReceiverRegistered) {
if (mReceiver == null)
mReceiver = new MyBroadcastReceiver();
registerReceiver(mReceiver, new IntentFilter("YourIntentAction"));
mIsReceiverRegistered = true;</