onReceive 被调用多次

Waf*_*ae 4 android broadcastreceiver receiver

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

当我得到日期时,我发送消息broadCast以刷新用户界面。

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);
 }
Run Code Online (Sandbox Code Playgroud)

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"));}
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

Pan*_*kaj 7

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

LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("my-event"));}
Run Code Online (Sandbox Code Playgroud)

  • 永远不要这样做!onDestroy 不保证被系统调用。 (4认同)