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后停留。