2

我有一项从其他应用程序获取数据的服务。

当我得到日期时,我会发送消息broadCast以刷新 UI。

onReceive方法被多次调用,数据被多次显示。

这是我的代码:

数据服务.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"));}

我该如何解决这个问题?

4

3 回答 3

4

将广播注册行放入 onCreate 并在 onDestroy() 方法中取消注册。您必须从 onResume() 移动到 onCreate 的行是:-

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("my-event"));}
于 2015-04-07T06:06:44.467 回答
1

可能,您有两个活动实例同时存在。在消息接收器上设置断点并检查活动类实例的地址,并查看每次调用 onReceive 时它们是否不同。

有几个原因可以让两个实例同时存在,但最常见的原因之一是在活动中泄漏上下文。更多关于这个话题

于 2015-04-06T12:50:43.307 回答
0

我通过在 onPause 方法中取消注册 BroadcastReceiver 解决了同样的问题

LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver,new IntentFilter("my-event")));

在 OnResume 方法中注册

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("my-event"));}

于 2016-10-26T05:10:07.317 回答