onReceive多次调用

时间:2015-04-06 12:01:58

标签: android broadcastreceiver receiver

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

当我收到约会时,我会向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"));}

我该如何解决这个问题?

3 个答案:

答案 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"));}