BroadcastReceiver接收的Intent数量超过发送数量

时间:2013-01-14 15:42:00

标签: android android-intent broadcastreceiver android-activity android-service

我有下一个问题:

我创建了一个自定义的BroadcastReceiver,并在主要活动onCreate handler:

中注册它
public class MainActivity extends ListActivity {
  private static final LogReceiver logReceiver = new LogReceiver();

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    LocalBroadcastManager.getInstance(this).registerReceiver(logReceiver, new IntentFilter(LogReceiver.ACTION_LOG));
  }
...
}

BroadcastReceiver类:

public class LogReceiver extends BroadcastReceiver {
  @Override
  public void onReceive(Context context, Intent intent) {
     Log.i("intent", "intent <-");
  }
}

然后我使用下一个代码从本地服务发送多个Intent:

Intent intent = new Intent(LogReceiver.ACTION_LOG).putExtra("log", logString);
localBroadcastManager.sendBroadcast(intent);
Log.i("intent", "intent ->");

日志对我来说很奇怪:

  • intent - &gt;
  • intent&lt; -
  • 意图 - &gt;
  • intent&lt; -
  • intent&lt; -
  • 意图 - &gt;
  • intent&lt; -
  • intent&lt; -
  • intent&lt; -
  • ...

LogReceiver第一次只收到一个Intent,这是正确的,但每次下次收到的Intent比发送的更多。

我可以在我的项目中从Intent方法切换,但有趣的是为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

您应该在活动的onDestroy中取消注册接收器。 此外,你应该检查这个接收器是否真的必须是静态的。

如果您需要整个应用程序中的接收器,则应将其保存在单独的单例类或自定义Application类中,而不是一个Activity。

然后您可以在第一个启动的Activity中注册接收器。但是你应该确保它只被注册一次,例如通过在注册LocalBroadcastManager之前将boolean registered存储到接收器中。