我有一个分类在一个片段中的接收器子和一个附带的服务,它向广播接收器发送一条消息,以显示一个不确定地挂起某些条件的祝酒词。我也有一个布尔值告诉我接收器是否正在运行。接收器在点击列表项目时注册,如图所示。
if(!ReceiverON){
getActivity().registerReceiver(new Receiver(), filter);
ReceiverON=true;
}
我想在销毁片段后取消注册。我知道文档说它应该在OnPause中未注册但在onPause期间我使用Receiver与服务一起保持toast。在我的On Destroy I Unregister如下
if( ReceiverON){
ReceiverON=false;
Log.i("Log on Destroy", "Receiver ON...Destroying");
getActivity().unregisterReceiver(new Receiver());
if(getActivity().startService(ServiceIntent) != null) {
getActivity().stopService(ServiceIntent);
}
}
如果我这样做,应用程序崩溃时出现IllegalArgumentException:Receiver未在Unregister行上注册。如果我注释掉该行,我会收到一条关于不注销我的Receiver的错误日志。我该如何解决这个问题?
答案 0 :(得分:2)
IllegalArgumentException:Receiver未注册
因为您在Receiver
方法中传递unregisterReceiver
类的不同对象。使用您在registerReceiver
中传递的相同对象来取消注册广播接收器:
- > 在班级创建Receiver
班级的对象:
private Receiver objReceiver;
- > 在调用objReceiver
方法之前初始化registerReceiver
对象:
objReceiver=new Receiver();
getActivity().registerReceiver(objReceiver, filter);
- > 将objReceiver
对象传递给unregisterReceiver
:
if(objReceiver !=null)
getActivity().unregisterReceiver(objReceiver);