我有一个从其他应用程序获取数据的服务。
当我收到约会时,我会向broadCast
发送消息以刷新用户界面。
多次调用onReceive
方法,多次显示数据。
这是我的代码:
DataService.java
if(sizeLat == 1) {
sendMessage("Alerte1; »);
}
else {
sendMessage("Alerte2; »);
}
private void sendMessage(String message) {
Log.w("","==> send message");
Intent intent = new Intent("my-event");
// add data
intent.putExtra("message", message);
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
}
MainActivity.java
// handler for received Intents for the "my-event" event
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.e("","Onreceiver");
String message = intent.getStringExtra("message");
if(message.equals("Alerte1")){
parentItems.add(message);
adapter.notifyDataSetChanged();
}}};
@Override
protected void onResume() {
Log.d(TAG, "On Resume");
super.onResume();
// Register mMessageReceiver to receive messages.
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("my-event"));}
我该如何解决这个问题?
答案 0 :(得分:3)
将广播注册行放入onCreate并在onDestroy()方法中取消注册。您必须从onResume()移动到onCreate的行是: -
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
new IntentFilter("my-event"));}
答案 1 :(得分:1)
可能有两个活动同时存在。在消息接收器上创建一个断点并检查活动类实例的地址,并在每次调用onReceive时查看它们是否不同。
有几个原因可以让你有两个实例同时生活,但最常见的一个是在活动中泄漏环境。 有关topic的更多信息。
答案 2 :(得分:0)
我通过在onPause方法中取消注册BroadcastReceiver来解决同样的问题
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver,new IntentFilter(" my-event")));
在OnResume方法
中注册LocalBroadcastManager.getInstance(本).registerReceiver(mMessageReceiver, 新的IntentFilter(" my-event"));}