为什么接收器每次激活onResume()方法时都会收到广播?

问题描述 投票:0回答:4

在我的onresume()活动中,我有这个

IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(mReceiver,intentFilter);

每次onResume()激活时,mReceiver总是收到一个广播,其动作是ConnectivityManager.CONNECTIVITY_ACTION

这很奇怪,因为我的网络状态处于稳定的wifi状态并且根本没有改变。

android broadcast onresume
4个回答
2
投票

每次onresume被激活时,registerReceiver每次被调用一次。 registerReceiver发送bck粘性广播。调用registerBroadcast后,粘性广播将被发送到接收器。

你可以使用unregisterReceiver或检查你是否必须检查你是否已经注册并跳过,如果是的话...


1
投票

根据registerReceiver(BroadcastReceiver接收器,IntentFilter过滤器)的文档:

系统可以广播“粘性”的意图 - 这些意图在广播完成后留在周围,以便发送到任何后来的注册。如果您的IntentFilter与其中一个粘性Intent匹配,则该函数将返回该Intent并将其发送到您的接收器,就好像它刚刚被广播一样。

虽然您现在只是注册接收器,但是系统在何时广播该Intent并且由于该意图是粘性的,因此一旦您注册就会广播。

看看这个ConnectivityManager.CONNECTIVITY_ACTION, always broadcast when registering a receiver?


0
投票

似乎粘性广播是行动的常见问题ConnectivityManager.CONNECTIVITY_ACTION,按照我试图用XML描述接收器的指令,但似乎不能用AT最后,我使用灵活的方法来解决这个问题:因为每次在Onresume都会发送广播,我将布尔值设置为'false',当onresume第一次调用接收器时,程序将不做任何事情,只需将此布尔值设置为'true'即可。然后当CONNECTIVITY改变时,它将进入正常过程。这似乎不是一个优雅的方法,但它在我的应用程序中工作。


0
投票

一个解决方案是在你的isInitialStickyBroadcastonReceive回调中使用BroadcastReceiver来知道你是否正在进行粘性广播并采取相应行动(BroadcastReceiver : isInitialStickyBroadcast

© www.soinside.com 2019 - 2024. All rights reserved.