您的位置:首页 > 其它

BroadcastReceiver多次unregisterReceiver 导致 Receiver not registered问题

2016-03-28 13:32 651 查看

转载请注明出处:/article/8530902.html

注销广播接受器的时候出现该错误:

java.lang.IllegalArgumentException: Receiver not registered: com.xxx.popuwindow.member.MemberBaseCard$1@41624e70
at android.app.LoadedApk.forgetReceiverDispatcher(LoadedApk.java:657)
at android.app.ContextImpl.unregisterReceiver(ContextImpl.java:1362)
at android.content.ContextWrapper.unregisterReceiver(ContextWrapper.java:445)
at com.xxx.popuwindow.member.MemberBaseCard.stopSendCommand(MemberBaseCard.java:88)
at com.xxx.popuwindow.member.MemberBaseCard.dismiss(MemberBaseCard.java:95)
at com.xxx.popuwindow.RightPopWindowDialog$1.onDismiss(RightPopWindowDialog.java:52)
at android.widget.PopupWindow.dismiss(PopupWindow.java:1278)
at com.xxx.popuwindow.RightPopWindowDialog.dismiss(RightPopWindowDialog.java:126)
at com.xxx.popuwindow.member.MemberBaseCard.dismiss(MemberBaseCard.java:96)
at com.xxx.popuwindow.member.MemberPayPop.onClick(MemberPayPop.java:245)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
at dalvik.system.NativeStart.main(Native Method)


出现这个错误的原因就是 该广播接受器已被注销,导致找不到该广播接收器.解决办法就是加一个Tag标识.详细见代码:

private boolean mReceiverTag = false;   //广播接受者标识
//代码中动态注册广播
private void registerReceiver() {
if (!mReceiverTag){     //在注册广播接受者的时候 判断是否已被注册,避免重复多次注册广播
IntentFilter mFileter = new IntentFilter();
mReceiverTag = true;    //标识值 赋值为 true 表示广播已被注册
mFileter.addAction("com.android.scan.RECEIVED_CODE_FROM_NFC");
this.registerReceiver(mReceiver, mFileter);
}
}
//注销广播
private void unregisterReceiver() {
if (mReceiverTag) {   //判断广播是否注册
mReceiverTag = false;   //Tag值 赋值为false 表示该广播已被注销
this.unregisterReceiver(mReceiver);   //注销广播
}

}


代码中动态注册广播,记得在界面关闭的时候注销广播.不然会有多个广播接受者存在.记得代码中

registerReceiverunregisterReceiver 成对存在.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: