(Android开发辅助工具)动态广播注册解注工具
生活随笔
收集整理的這篇文章主要介紹了
(Android开发辅助工具)动态广播注册解注工具
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
平常我們開發(fā)的時(shí)候需要使用到動(dòng)態(tài)注冊(cè)廣播,如果在一個(gè)類內(nèi)注冊(cè)很多的廣播代碼就會(huì)既冗余又亂糟糟的,就像這樣:
msgReceiver = new NewMessageBroadcastReceiver();IntentFilter intentFilter = new IntentFilter(EMChatManager.getInstance().getNewMessageBroadcastAction());registerReceiver(msgReceiver, intentFilter);IntentFilter ackMessageIntentFilter = new IntentFilter(EMChatManager.getInstance().getAckMessageBroadcastAction());registerReceiver(ackMessageReceiver, ackMessageIntentFilter);IntentFilter cmdMessageIntentFilter = new IntentFilter(EMChatManager.getInstance().getCmdMessageBroadcastAction());registerReceiver(cmdMessageReceiver, cmdMessageIntentFilter); newMessageBroadcastReceiver = new NewMessageTipBroadcastReceiver();IntentFilter filter = new IntentFilter(StringConstants.NewMessageBroadcastReceiver);filter.addCategory(Intent.CATEGORY_DEFAULT);registerReceiver(newMessageBroadcastReceiver, filter);disTipBroadcastReceiver = new DisTipBroadcastReceiver();filter = new IntentFilter(StringConstants.DisTipBroadcastReceiver);filter.addCategory(Intent.CATEGORY_DEFAULT);registerReceiver(disTipBroadcastReceiver, filter);上面是我們的注冊(cè)部分,除了我們需要將廣播的引用升級(jí)為類的成員之外,我們還需要添加解注代碼,就像下面這樣: if (newMessageBroadcastReceiver != null) {unregisterReceiver(newMessageBroadcastReceiver);}if (disTipBroadcastReceiver != null) {unregisterReceiver(disTipBroadcastReceiver);}if (mJPushReceiver != null) {unregisterReceiver(mJPushReceiver);}if (newMessageBroadcastReciver != null) {unregisterReceiver(newMessageBroadcastReciver);}if (newTeacherMessageBroadcastReciver != null) {unregisterReceiver(newTeacherMessageBroadcastReciver);}if (newMessageUserCenterBroadcastReciver != null) {unregisterReceiver(newMessageUserCenterBroadcastReciver);}if (mUIRefreshReceiver != null) {unregisterReceiver(mUIRefreshReceiver);}
所以,我們需要一種極為簡(jiǎn)便的工具來完成這些工作,讓我們開發(fā)的時(shí)候不用去關(guān)心那么多不重要的東西: package com.sahadev.commontools;import java.util.Map;import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.support.v4.util.ArrayMap;/*** 廣播注冊(cè)解注工具* * @author Sahadev**/ public class RegisterReceiverUtils {private static Map<Class<?>, BroadcastReceiver> MAPS = new ArrayMap<Class<?>, BroadcastReceiver>();/*** @param context* @param broadcastReceiverClass* @param action*/public static void registerBroadcastReceiver(Context context, Class<?> broadcastReceiverClass, String action) {IntentFilter filter = new IntentFilter(action);filter.addCategory(Intent.CATEGORY_DEFAULT);try {BroadcastReceiver broadcastReceiver = (BroadcastReceiver) broadcastReceiverClass.newInstance();if (broadcastReceiver != null) {MAPS.put(broadcastReceiverClass, broadcastReceiver);context.registerReceiver(broadcastReceiver, filter);}} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}}public static void unregisterBroadcastReceiver(Context context, Class<?> broadcastReceiverClass) {BroadcastReceiver broadcastReceiver = MAPS.get(broadcastReceiverClass);context.unregisterReceiver(broadcastReceiver);MAPS.remove(broadcastReceiverClass);}}
上面這個(gè)工具只是簡(jiǎn)單的對(duì)注冊(cè)解注做了簡(jiǎn)單的封裝,如果可以,我們可以開放開啟與關(guān)閉方法,與Activity這樣的組件的創(chuàng)建銷毀方法進(jìn)行關(guān)聯(lián),以達(dá)到我們更簡(jiǎn)便的目的。
總結(jié)
以上是生活随笔為你收集整理的(Android开发辅助工具)动态广播注册解注工具的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于依存句法与语义角色标注的事件抽取项目
- 下一篇: 【LeetCode】3月21日打卡-Da