Caused by: java.lang.IllegalArgumentException:Receiver not registered: 解决办法

来源:互联网 发布:exe电子书制作软件 编辑:程序博客网 时间:2024/06/06 17:36


看到Receiver就确定是广播引起的啦。贴上问题代码:

直接创建一个Receiver对象

private BroadcastReceiver systemBR=new BroadcastReceiver() {
    @Override
   
public void onReceive(Contextcontext, Intent intent) {
        if (null!= intent) {
        }
    }
};

 

在onCreateView注册广播

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
IntentFilter filter = new IntentFilter();filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);filter.addAction(LoginManager.ACTION_LOGOUT);activity.registerReceiver(systemBR, filter);

}

 

在onDestroy注销广播

@Overridepublic void onDestroy() {    super.onDestroy();
    try {
        if (null != systemBR) {            unregisterReceiver(systemBR);        }    } catch (IllegalArgumentException e) {        Lg.e(e);    }}

 


 

类在还没registerReceiver执行ondestory中的 unregisterReceiver这情况是可能的,假如在onCreate有比较耗时的动作还没registerReceiver然后ondestory就会出现此情况,按照这思路BroadcastReceiver就不能在类初始化后就创建对象(比onCreate还之前)。修改后代码:

 

private BroadcastReceiver systemBR;

 

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
IntentFilter filter = new IntentFilter();filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);filter.addAction(LoginManager.ACTION_LOGOUT);
 
systemBR = new BroadcastReceiver() {    @Override    public void onReceive(Context context, Intent intent) {        if (null != intent) {                   
            }    }};
activity.registerReceiver(systemBR, filter);

}

问题解决。

 


0 0
原创粉丝点击