安卓注册判断重复注册机制是什么?
2019-04-23 14:58
2673浏览
5回答
安卓注册判断重复注册机制是什么?:记一次安卓开发广播重复注册的解决方案问题需要全局接收广播,因此使用的LocalBroadcastManager目前出现的:-安卓,重复,判断,机制
转载请联系作者获得授权,并标注“文章作者”。
最新文章|
最新问题|
最新经验
记一次安卓开发广播重复注册的解决方案
问题
需要全局接收广播,因此使用的LocalBroadcastManager
目前出现的问题时界面重复进入,会导致广播重复注册与接收
出现原因
一般这种情况的出现原因广播多次注册或者重复注册
解决办法
网上大部分都是说出现原因,但并没有一个具体的解决方案
我的思路是判断当前广播是否注册,保证只注册一次,这里利用反射实现
判断当前广播是否注册,代码如下:
/** * * action IntentFilter中的某一个action,因为获取到的是IntentFilter的所有action,所以只要匹配一个就可以 * */ private boolean isRegister(LocalBroadcastManager manager,String action) { boolean isRegister = false; try { Field mReceiversField = manager.getClass().getDeclaredField("mReceivers"); mReceiversField.setAccessible(true); // String name = mReceiversField.getName(); HashMap<BroadcastReceiver, ArrayList<IntentFilter>> mReceivers = (HashMap<BroadcastReceiver, ArrayList<IntentFilter>>) mReceiversField.get(manager); for (BroadcastReceiver key : mReceivers.keySet()) { ArrayList<IntentFilter> intentFilters = mReceivers.get(key); MyLogUtil.e("Key: " + key + " Value: " + intentFilters); for (int i = 0; i < intentFilters.size(); i++) { IntentFilter intentFilter = intentFilters.get(i); Field mActionsField = intentFilter.getClass().getDeclaredField("mActions"); mActionsField.setAccessible(true); ArrayList<String> mActions = (ArrayList<String>) mActionsField.get(intentFilter); for (int j = 0; j < mActions.size(); j++) { if (mActions.get(i).equals(action)) { isRegister = true; break; } } } } } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } return isRegister; }使用方式:
LocalBroadcastManager manager = LocalBroadcastManager.getInstance(getActivity()); isRegister = isRegister(manager, mActions); if (!isRegister) { manager.registerReceiver(mLocalReceiver, mIntentFiiter); }不懂,抱歉。
谢谢邀请,这个问题我没有关注过。
我觉得安卓判断重复注册机制和电脑上的重复注册应该一样吧,我没试过安卓的,我可以给你用电脑的举个例子,你看一样不一样,代码就不用写了,说一下原理吧,假如用用户名判断的话,别人输入注册的用户名会保存到数据库里,当另一个人注册时,会话机制把当前的用户名和数据库里的用户名作比较,这里看你会不会把用户名使用MD5呢,如果不用,当比较现在输入的字符串和数据库之前有的字符串重复时,就会返回一个信息给用户,提示用户重新输入,电脑里使用AJAX的多一点,不知安卓怎么用的,如果帮不到你,可以请教其他大神!
谢谢邀请哈!
但是不好意思了,这个问题我不知道,不知道不能瞎说,所以不能帮您解答了!抱歉!