我有下一个问题:
我创建了一个自定义的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 ->");
日志对我来说很奇怪:
LogReceiver第一次只收到一个Intent,这是正确的,但每次下次收到的Intent比发送的更多。
我可以在我的项目中从Intent方法切换,但有趣的是为什么会发生这种情况?
答案 0 :(得分:0)
您应该在活动的onDestroy中取消注册接收器。 此外,你应该检查这个接收器是否真的必须是静态的。
如果您需要整个应用程序中的接收器,则应将其保存在单独的单例类或自定义Application类中,而不是一个Activity。
然后您可以在第一个启动的Activity中注册接收器。但是你应该确保它只被注册一次,例如通过在注册LocalBroadcastManager之前将boolean registered
存储到接收器中。