0

我有下一个问题:

我创建了一个自定义 BroadcastReceiver 并将其注册到主要活动 onCreate 处理程序中:

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));
  }
...
}

广播接收器类:

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

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

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

日志对我来说看起来很奇怪:

  • 意图->
  • 意图<-
  • 意图->
  • 意图<-
  • 意图<-
  • 意图->
  • 意图<-
  • 意图<-
  • 意图<-
  • ...

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

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

4

1 回答 1

0

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

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

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

于 2013-01-14T15:57:40.400 回答