3

我想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 中,我正在执行一个AsyncTask并且onPostExecute我正在发送一个带有 B 活动上下文的广播。但不知何故,A 活动的接收者仍然收到消息。两个接收器具有相同的内容但具有不同的名称。

所以这是我的问题:

  • 我应该在方法unregisterReceiver上开始新活动时吗?onPause
  • BroadcastReceiver我就是这么用的,只打一个电话?每当我发送任何消息时,我都应该一次又一次地注册吗?
  • 我很确定我没有将任何接收者定义为Manifest. 我想这是我做错了。如果这很好,我如何在发送广播时使用 IntentFilter?

如果有不确定的问题,请告诉我。任何有关 BroadcastReceiver 的线索都会很棒而且很受欢迎。

4

1 回答 1

2
  1. 是的,您应该在活动暂停时取消注册广播接收器。这是潜在的泄漏。
  2. 没有广播接收器不是一个呼叫。每次为注册的意图进行广播时都会调用它们。
  3. 您可以像这样在 OnResume 上注册接收器以获取特定意图,

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);
于 2012-08-28T19:20:34.107 回答