无法在Android中注销BroadcastReceiver

无法在Android中注销BroadcastReceiver,android,broadcastreceiver,Android,Broadcastreceiver,我已经看过了,但这并不能解决我的问题 在Android应用程序上,我在onResume()方法中注册了一个BroadCastReceiver,我想在onPause()方法中注销它 logcat消息表示无法注销该方法。顺便说一句: public static final String DATA_REFRESHED_ACTION = "course.labs.notificationslab.DATA_REFRESHED"; 感谢您所做的一切您的代码看起来不错,但您应该移动super.onPaus

我已经看过了,但这并不能解决我的问题

在Android应用程序上,我在onResume()方法中注册了一个BroadCastReceiver,我想在onPause()方法中注销它

logcat消息表示无法注销该方法。顺便说一句:

public static final String DATA_REFRESHED_ACTION = "course.labs.notificationslab.DATA_REFRESHED";

感谢您所做的一切

您的代码看起来不错,但您应该移动
super.onPause()到onPause顶部-我不确定这是否是问题的原因

假设您没有在其他地方注销收件人,则无论您的收件人是否已注册,您都可以保留一些标志,请按照此说明进行操作,以便:

此外,您还应选择使用更适合本地应用程序广播的LocalBroadcastManager:


[编辑]

从您的日志中:

java.lang.IllegalArgumentException:未注册的接收器:null

看起来您尚未初始化
mRefreshReceiver
,并且它为空,您应该调用:

mRefreshReceiver = new RefreshReceiver();

在调用register之前,或者如果您有这样的代码,请确保您没有在某处为mRefreshReceiver分配null。

您可以发布日志吗?根据日志猫,您的接收者
mRefreshReceiver
从未注册过。你是否正在创建广播接收器?你把服务放在清单中了吗?mRefreshReceiver不在清单中,因为它不是从BroadcastReceiver继承的。Receiver是BroadcastReceiver的一个实例。你应该将
mRefreshReceiver=new BroadcastReceiver….
移到你的方法之外(到类主体),它应该可以正常工作。mRefreshReceiver可能无法设置为如果不刷新或为false。另外,android在配置更改期间(如屏幕旋转)正在重新创建活动实例,我认为这可能会导致调用ensureData(),而mIsFresh为false;对于if(已注册){unregisterReceiver(mrefreshceiver);registered=false;}
mRefreshReceiver = new RefreshReceiver();