我是靠谱客的博主 羞涩戒指,最近开发中收集的这篇文章主要介绍Caused by: java.lang.IllegalArgumentException:Receiver not registered: 解决办法,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述


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

直接创建一个Receiver对象

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

 

在onCreateView注册广播

@Override
public 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注销广播

@Override
public 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;

 

@Override
public 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);

}

问题解决。

 


最后

以上就是羞涩戒指为你收集整理的Caused by: java.lang.IllegalArgumentException:Receiver not registered: 解决办法的全部内容,希望文章能够帮你解决Caused by: java.lang.IllegalArgumentException:Receiver not registered: 解决办法所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(81)

评论列表共有 0 条评论

立即
投稿
返回
顶部