2015-04-06 123 views
1

我有一個從其他應用程序獲取數據的服務。onReceive多次調用

當我得到日期時,我發送消息到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"));} 

我怎樣才能解決這個問題呢?

+1

這個問題可能是您的服務檢查是否你服務向您發送多個數據或可能多次發送數據。請進行調試並檢查它或打印日誌以查看究竟發生了什麼。 – Pankaj 2015-04-06 12:12:19

+0

沒有服務發送只有一次,我chefted, – Wafae 2015-04-06 12:20:00

+0

方法sendmessage()被稱爲juste一次,但onReceive()被調用多次 – Wafae 2015-04-06 12:23:31

回答

0

可能地,您有兩個同時生活的實例。在消息接收器上創建斷點並檢查活動類實例的地址,並在每次調用onReceive時查看它們是否有所不同。

有幾個原因讓你可以同時生活兩個實例,但最常見的一種是在活動內部泄漏背景。 更多關於topic

2

將廣播寄存器行放入onCreate中,並將其取消註冊到onDestroy()方法中。你必須從的onResume()來的onCreate招行是: -

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

永遠不要那樣做! onDestroy不保證被系統調用。 – zgulser 2015-12-23 08:39:00

+0

@zgulser http://stackoverflow.com/questions/23846352/registering-unregistering-broadcastreceivers-on-oncreate-ondestroy – AsafK 2016-03-20 14:12:00

+0

創建廣播接收器實例爲我工作。 – 2017-07-17 08:29:07

0

我的onPause方法

LocalBroadcastManager.getInstance(本).unregisterReceiver(mMessageReceiver,新IntentFilter的固定同樣的問題,通過註銷廣播接收器( 「我的事件」)));

中的onResume方法註冊它

LocalBroadcastManager.getInstance(本).registerReceiver(mMessageReceiver, 新IntentFilter的( 「我的事件」));}