安卓注册判断重复注册机制是什么?

2019-04-23 14:58 2613浏览 5回答
安卓注册判断重复注册机制是什么?:记一次安卓开发广播重复注册的解决方案问题需要全局接收广播,因此使用的LocalBroadcastManager目前出现的:-安卓,重复,判断,机制

转载请联系作者获得授权,并标注“文章作者”。

后发表回答
蜡笔小猴儿
1楼 · 2019-04-23 15:21.采纳回答

  

  记一次安卓开发广播重复注册的解决方案

  问题

  需要全局接收广播,因此使用的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); }

Hetvangen
2楼-- · 2019-04-23 15:27

  不懂,抱歉。

零点十九分食堂
3楼-- · 2019-04-23 15:20

  谢谢邀请,这个问题我没有关注过。

长理职培贺老师
4楼-- · 2019-04-23 15:17

  我觉得安卓判断重复注册机制和电脑上的重复注册应该一样吧,我没试过安卓的,我可以给你用电脑的举个例子,你看一样不一样,代码就不用写了,说一下原理吧,假如用用户名判断的话,别人输入注册的用户名会保存到数据库里,当另一个人注册时,会话机制把当前的用户名和数据库里的用户名作比较,这里看你会不会把用户名使用MD5呢,如果不用,当比较现在输入的字符串和数据库之前有的字符串重复时,就会返回一个信息给用户,提示用户重新输入,电脑里使用AJAX的多一点,不知安卓怎么用的,如果帮不到你,可以请教其他大神!

Acuve1ve
5楼-- · 2019-04-23 15:15

  谢谢邀请哈!

  但是不好意思了,这个问题我不知道,不知道不能瞎说,所以不能帮您解答了!抱歉!

  • 21th收官

    14:00-22:30 14:00-22:30 05月16日 14:00-22:30

    收官大促 狂送666份好礼

    注册土木工程师(岩土)

  • 王硕男

    19:00-19:25 19:00-19:25

    财务分析(二)

    注册土木工程师(岩土)

  • 王硕男

    19:00-19:30 19:00-19:30 05月21日 19:00-19:30

    经济费用效益分析

    注册土木工程师(岩土)

环球网校移动课堂APP 直播、听课。职达未来!

安卓版

下载

iPhone版

下载
环球网校快问 · 最新文章 · 最新问题
Copy 2018 https://wenda.hqwx.com/ All Rright Reserved. 京ICP备16038139号-3 / Smrz 京ICP备16038139号-3/ 举报电话:400-678-3456 /