android BroadcastReceiver 调用了两次
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"));
问题是当我关闭 activity runOnUiThread 中的代码调用了不止一次
如果我关闭 activity 并打开它调用了 2 次如果我再次打开它调用了 3 次等等
您需要在 activity 暂停后注销广播接收器。在 activity 的 onPause() 方法中。 LocalBroadcastManager.getInstance(this).unregisterReceiver(m 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
只会被调用一次
我正在做聊天项目
我在这里做的是连接人员的服务,我设置了一个广播接收器来从服务中获取数据
这是接收者代码
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"));
问题是当我关闭 activity runOnUiThread 中的代码调用了不止一次
如果我关闭 activity 并打开它调用了 2 次如果我再次打开它调用了 3 次等等
您需要在 activity 暂停后注销广播接收器。在 activity 的 onPause() 方法中。 LocalBroadcastManager.getInstance(this).unregisterReceiver(m 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
只会被调用一次