0

我用LocalBroadcastManager廣播的Intent似乎沒有被消費,而是積累起來。每次我發送廣播時,我都會收到它以及以前發送的所有廣播,其格式爲onReceiveLocalBroadcastManager廣播沒有消費

期刊JobService我使用IntentFilter創建BroadcastReceiver,並使用lbm.registerReceiver(receiver, intentFilter);動態註冊它。然後我開始一個Service,它在其構造函數中使用相同的過濾器創建一個Intent,並且執行lbm.sendBroadcast(intent);一次,然後自行停止。 sendBroadcast返回true,表明它是在另一端收到的(請參閱Is there a way to tell if LocalBroadcastManager broadcasts were received?)。但每次重複此循環時,都會再次收到之前收到的所有Intents。通過捆綁一個時間戳,我已經證實,它確實是舊的,只是躺在一邊,並一次又一次地被接收。

如何「消費」收到的Intent?從我可以告訴的是,如果它被onReceive收到,這不應該是必要的。我在IntentLocalBroadcastManager中找不到任何取消廣播的方法。

我該如何接收每個廣播一次?

+1

確保在JobService完成時取消註冊您的BroadCastReceiver。 –

+0

在工作完成之前,我確實已經忘記這麼做了。迄今爲止,結果看起來更好。一線希望?!謝謝你的提示! – Toerndev

回答

0

感謝@Talha Mir將解決方案作爲評論發佈。

我只在onStopJob中撥打unregisterReceiver,而不是其他路徑。添加這個問題就解決了。

顯然,如果接收方沒有註銷,廣播可能會在onReceive後停留。