错误提示:java.lang.IllegalArgumentException: Receiver not registered。。
顾名思义就是Receiver没有被注册,这是由于取消了没有注册的Receiver导致的错误。
我们使用Receiver时必须保证注册(register)和反注册(unregister)成对出现。
遇到这种问题时,你需要检查下自己代码中注册和反注册的代码,看下是否存在多次调用unregister的时候。
很多时候都是想当然认为会那样,但是程序中可能有我们未预料的出口,比如我的程序中在onCreate注册,finish取消注册,理论进入、退出时应该 成对出现,但实际报错了!分析到最后是原布局中使用了TabActivity、GroupActivity等多种结构嵌套,退出当前Activity 时,finish方法被执行了多次。
所以建议Receiver注册和反注册的过程放到onResume和onPause过程中,两个理由:
(1)这两个过程肯定会成对出现,因此可以避免上述错误。
(2)一般我们使用Receiver是为了接受通知来更改UI(特殊情况除外),而对于Activity(UI)界面位于后台时,没必要去接受通知更改UI。
示例:
在 Adroid2.1 和 Adroid2.2 设备上,如果 Activity 中使用到 ViewFlipper 控件,进行横竖屏切换操作时会发生如下错误信息
java.lang.IllegalArgumentException: Receiver not registered: android.widget.ViewFlipper$1@43dee3c0
这是由于 onDetachedFromWindow() 莫名其妙地在 onAttachedToWindow() 之前被调用了。据说是一个 Bug ,不知在最新的 2.3 上是否修正。
下面提供一个很简单的解决方案,重写 ViewFlipper 的 onDetachedFromWindow() 方法
@Override
protected void onDetachedFromWindow () {
try {
super.onDetachedFromWindow();
}
catch (IllegalArgumentException e) {
stopFlipping();
}
}
方法二: 这种方法是放在onresume里面初始化注册 在onpause里面取消注册
@Override
protected void onResume() {
super.onResume();
if (receiver == null) {
filter = new IntentFilter(ResponseReceiver.ACTION_RESP);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new ResponseReceiver();
registerReceiver(receiver, filter);
}
}
@Override
protected void onPause() {
super.onPause();
if (receiver != null) {
unregisterReceiver(receiver);
receiver = null;
}
}
方法三:在ondestory里面使其receiver为空
@Override
if (batteryNotifyReceiver!=null) {
unregisterReceiver(batteryNotifyReceiver);
batteryNotifyReceiver=null;
}
相关推荐
NULL 博文链接:https://xienan123.iteye.com/blog/1042124
NULL 博文链接:https://listen-raining.iteye.com/blog/2087518
java.lang.IllegalArgumentException Cannot format given Object as a Date
NULL 博文链接:https://wxb-j2ee.iteye.com/blog/1183736
Caused by: java.lang.IllegalArgumentException: input == null! at javax.imageio.ImageIO.read(ImageIO.java:1388) at com.pleanwar.fiying.FlyingObject.loadImage(FlyingObject.java:52) at ...
NULL 博文链接:https://denghuijia1314521-gmail-com.iteye.com/blog/1341258
对接微信接口中因为jdk8解密长度不够 报错 java.security.InvalidKeyException: Illegal key size 替换路径:(记得备份原有的文件) C:\Program Files\Java\jdk1.8.0_131\jre\lib\security
解决在Linux系统下,POI、easyExcel 报错 java.lang.IllegalArgumentException: The workbook already contains a sheet named。原因是缺少了字体文件,如果是Docker部署使用本资源即可。内部提供字体资源以及代码...
链接is unknown to this NavController
两天因为项目需要整合spring、struts2、mybatis三大框架,但启动的时候总出现这个错误,困扰我好久,折腾了好久终于找到问题根源,下面小编给大家分享下问题所在及解决办法,一起看看吧
复制并覆盖%JAVA_HOME%/jre/lib/security下的local_policy.jar 和 US_export_policy.jar
主要介绍了IDEA 中使用 ECJ 编译出现 java.lang.IllegalArgumentException问题 ,本文内容简短给大家介绍的好,需要的朋友可以参考下
Java demo源码 398.java.lang.IllegalArgumentException- 398.java.lang.IllegalArgumentException 复现bug demo 源码
SpringBoot 整合 MyBatis。解决因Mybatis-Spring版本过高引起的“Caused by: java.lang.IllegalArgumentException: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required”异常
主要介绍了 Java java.lang.ExceptionInInitializerError 错误如何解决的相关资料,需要的朋友可以参考下
今天小编就为大家分享一篇关于Java上传文件错误java.lang.NoSuchMethodException的解决办法,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
oracle与java连接的驱动
### Cause: java.lang.IllegalArgumentException: jdbcUrl is required with driverClassName. at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:...
java.lang.IllegalArgumentException: System memory 259522560 must be at least 471859200. Please increase heap size using the --driver-memory option or spark.driver.memory in Spark configuration.at.org....
在通过接口setComponentEnabledSetting,设置android组件可用或者不可用的时候,如果刚刚设置完成后,立即交流看关机,发现开机后本次设置并没有被保存。本文详细的分析了这个问题。