我有一个在特定条件下发送的意图。日志证明它只发送一次,但接收方每隔几毫秒接收它多次。
10-01 10:09:59.201: I/System.out(13543): SENDER CHECKPOINT
10-01 10:09:59.211: I/System.out(13543): RECEIVER CHECKPOINT
10-01 10:09:59.291: I/System.out(13543): RECEIVER CHECKPOINT
我已经确认只有一个广播接收器注册,并且只有一个与注册的 BR 一起使用的动作过滤器。它仅用于在另一个线程中运行的服务广播意图的单个活动中。同样,日志证实了一个广播和多个收据。更重要的是,回执收据中的额外内容为空。
怎么会这样?操作系统是否可能正在呼应它?
发送广播的代码:
private void sendBroadcast(boolean status, String message, String action){
System.out.println("SENDER CHECKPOINT");
Intent intent = new Intent(action);
Bundle bundle = new Bundle();
bundle.putBoolean("status", status);
bundle.putString("message", message);
intent.putExtras(bundle);
sendBroadcast(intent);
}
接收广播的代码:
private class displayUpdate extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("RECEIVER CHECKPOINT");
};
}
登记:
@Override
public void onResume() {
super.onResume();
try {
// just in case onResume is called w/o a pause
try{activity.unregisterReceiver(displayReceiver);}catch(Exception e){}
filterRefreshUI = new IntentFilter(REFRESH_UI);
activity.registerReceiver(displayReceiver, filterRefreshUI);
} catch (Exception e) {
e.printStackTrace();
}
}
注销:
@Override
public void onPause() {
super.onPause();
try{unregisterReceiver(displayReceiver);}catch(Exception e){}
}
真的就是这么简单!然而接收器发射两次!
如果您想知道 - 注册/取消注册在 onPause/onResume 中处理,以防止在应用程序被操作系统杀死时泄漏内存。