关于使用BroadcastReceivers的一些问题

时间:2012-08-28 19:07:03

标签: android android-intent broadcastreceiver activity-lifecycle intentfilter

我想在我的应用程序中使用BroadcastReceiver作为AsyncTask结果指标,而不是Activities,因此也AsyncTasks。我认为我的做法没有错,或者我错过了什么。

我正在做的事情:首先,在onCreate期间,我使用BroadcastReceiver方法将我的接收器注册为registerReceiver。我的接收器看起来像:

protected BroadcastReceiver myReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String msg_for_me = intent.getStringExtra("some_msg");
        Log.i("Tutorial", msg_for_me);
    }
}

在我的申请中,我 A和B活动。每个都有不同的接收器,从不同的任务获取消息。顺便说一句,我必须澄清,A活动开始B活动。

我正在使用接收器,它在活动A中,然后活动A使用startActivity开始B.在活动B中,我正在执行AsyncTask并且在onPostExecute我正在发送带有B活动上下文的广播。但不知何故,A活动的接收者仍在收到消息。两个接收器具有相同的内容,但名称不同。

所以这是我的问题:

  • 我在unregisterReceiver方法开始新活动时应该onPause吗?
  • BroadcastReceiver我是如何使用的,仅用于一次通话?每当我发送任何消息时,我是否应该反复注册?
  • 我很确定我没有为Manifest定义任何接收器。我想这就是我做错了。如果这很好,我怎样才能在发送广播时使用IntentFilter?

如果有不确定的问题,请告诉我。关于BroadcastReceiver的任何线索都会很棒并且很有用。

1 个答案:

答案 0 :(得分:2)

  1. 是的,您应该在活动暂停时取消注册广播接收器。它 是潜在的泄漏。
  2. 没有广播接收器不适合一个电话。 每次为注册的广播完成时都会调用它们 意图。
  3. 您可以注册特定意图的接收器 像这样的OnResume,
  4. mContext.registerReceiver(iReceiver,new android.content.IntentFilter(“android.intent.action.BATTERY_CHANGED”));

    iReceiver的地方,

     iReceiver = new IntentReceiver();
    
    private class IntentReceiver extends BroadcastReceiver {
        private final String LOG_TAG="IntentReceiver";
    
        @Override
        public void onReceive(Context arg0, Intent intent) {
    
        }
     }
    

    并在OnPause上取消注册

    mContext.unregisterReceiver(iReceiver);