Android 我打过很多次电话

Android 我打过很多次电话,android,broadcastreceiver,receiver,Android,Broadcastreceiver,Receiver,我有一个从其他应用程序获取数据的服务 当我得到日期时,我发送消息到广播,以刷新用户界面 onReceive方法被多次调用,数据被多次显示 这是我的代码: DataService.java MainActivity.java 如何解决此问题?可能有两个活动实例同时存在。在消息接收器上设置一个断点,检查activity类实例的地址,并查看每次调用onReceive时它们是否不同 有几个原因可以解释为什么两个实例同时存在,但最常见的原因之一是在活动中泄漏上下文。 更多信息。将广播寄存器行置于onCre

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

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

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

这是我的代码:

DataService.java

MainActivity.java


如何解决此问题?

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

有几个原因可以解释为什么两个实例同时存在,但最常见的原因之一是在活动中泄漏上下文。
更多信息。

将广播寄存器行置于onCreate中,并在onDestroy方法中注销它。您必须从onResume移动到onCreate的行是:-

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

我通过在onPause方法中注销BroadcastReceiver修复了相同的问题

LocalBroadcastManager.getInstancethis.unregisterReceivermMessageReceiver,new IntentFiltermy事件

在OnResume方法中注册它

LocalBroadcastManager.getInstancethis.RegisterReceiverMessageReceiver,
新的IntentFiltermy事件;}

该问题可能与您的服务有关。请检查您的服务是否向您发送多个数据,或者可能多次发送数据。进行调试并检查它或打印日志以查看到底发生了什么。否服务只发送一次,我检查methode sendmessage只调用了一次,但onReceive调用了多次您正在调用private BroadcastReceiver的多个实例mMessageReceiver=new BroadcastReceiver,使其成为静态或单态以避免这种行为。回答这里-永远不要这样做!onDestroy不能保证被系统调用。@zgulser创建广播接收器的实例对我有用。
// 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"));}
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver,
            new IntentFilter("my-event"));}