![](/img/trans.png)
[英]Android BroadcastReceiver onReceive() called twice on android 4.0
[英]android BroadcastReceiver called twice
我正在做聊天項目
我在這里做的是與連接人員的服務,我設置了一個廣播接收器來從服務中獲取數據
這是接收器代碼
mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
try {
final String code = intent.getExtras().get("code").toString();
final JSONObject Message = new JSONObject(intent.getExtras().get("msg").toString());
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("test","test");
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
};
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,new IntentFilter("data"));
問題是當我關閉活動時,runOnUiThread 中的代碼多次調用
如果我關閉活動並打開它,它會調用 2 次,如果我再次這樣做,它會調用 3 次,依此類推
您的活動暫停后,您需要注銷廣播接收器。 在您活動的onPause()方法中。 LocalBroadcastManager.getInstance(本).unregisterReceiver(米的messageReceiver)
LocalBroadcastManager
的正確使用方法如下:
public static String REPORTBOOK_BROADCAST = "REPORTBOOK_BROADCAST";
@Override
protected void onResume() {
super.onResume();
recreateLists();
LocalBroadcastManager.getInstance(mContext).registerReceiver(reportBookReceiver, new IntentFilter(REPORTBOOK_BROADCAST));
}
@Override
protected void onPause() {
super.onPause();
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(reportBookReceiver);
}
@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(mContext).unregisterReceiver(reportBookReceiver);
}
這樣LocalBroadcastManager
只會被調用一次。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.