Evenbus思想解决切换网络高级处理(初级篇)
好久没有写博客了,今天我又回来了,不知道大家是否还认识当年上海的那个半年小子,现在他已经移驾来到广州了,好久不见甚是想念,如果有机会大家可以来广州聚餐。如果不认识我的,可以关注我,后期还有干货等待着大家,让大家大开眼界。
那么接下来我会将我这么多年的架构思想进行总结,让大家能够少走点弯路,少做点错事。还有我接下来准备做一个培训网站,将我的思想融入到该网站里面,不管是android、后台、ios、python,都在里面淋漓尽致表现出来。希望大家可以来观看我的视频,让我们携手共同努力创造美丽的家园。为我们中国经济加油。
好了,牛逼吹完后我们该走入正题了。如果你了解过EventBus思想再来看我以下对切换网络采取EventBus思想就一定会有一定的逻辑思维,很容易理解,如果你还不懂EventBus思想,下一篇,我准备再写一篇针对EventBus思想,自己手写EventBus来让大家对EventBus来一次大规模认识,让你们彻底将EventBus了解透底。
1.EventBus思想
EventBus是一个使用总线来发布自己的消息的,在底层将对象和注解方法进行绑定,post一条消息的时候会将Message对象传递进行验证,遍历如果有含该对象的话,就执行对象下的注解方法。好了,我们了解EventBus思想后我们再来看我们接下来的网络切换,带你们深入了解他如何处理的。
2.Brocastcast实现简单第一步,使用interface进行回调
1).网络管理
public class NetworkManager { private static volatile NetworkManager networkManager; private Application application; private NetStateReceiver receiver; private NetworkManager() { receiver = new NetStateReceiver(); } public static NetworkManager getDefault() { if (networkManager == null) { synchronized (NetworkManager.class) { if (networkManager == null) { networkManager = new NetworkManager(); } } } return networkManager; } public void registerListener(NetChangeObserver listener) { receiver.setListener(listener); } public Application getApplication() { return application; } public void init(Application application) { this.application = application; IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Constanst.ANDROID_NET_CHANGE_ACTION); application.registerReceiver(receiver, intentFilter); }}
2).Brocastcast监听网络变化后使用interface回调给注册层
public class NetStateReceiver extends BroadcastReceiver { private NetType netType; private NetChangeObserver listener; public NetStateReceiver() { // 初始化网络 netType = NetType.NONE; networkList = new HashMap<>(); } public void setListener(NetChangeObserver listener) { this.listener = listener; } @Override public void onReceive(Context context, Intent intent) { if (intent == null || intent.getAction() == null) { Log.e(Constanst.LOG_TAG, "异常"); return; } // 处理广播事件 if (intent.getAction().equalsIgnoreCase(Constanst.ANDROID_NET_CHANGE_ACTION)) { Log.e(Constanst.LOG_TAG, "网络发生改变"); netType = NetworkUtils.getNetType(); if (NetworkUtils.isNetworkConnected()) { // Log.e(Constanst.LOG_TAG, "网络连接成功"); listener.onConnect(netType); } else { Log.e(Constanst.LOG_TAG, "网络连接失败"); listener.onDisConnect(); } } }
public enum NetType { // 只要有网络,包括:WiFi / GPS AUTO, // WIFI网络 WIFI, // 主要是PC / 笔记本电脑 / PAD设备 上网 CMNET, // 手机上网 CMWAP, // 没有网络 NONE}
public class NetworkUtils { /** * 判断网络是否连接,返回false为没有任何连接 * * @return boolean */ public static boolean isNetworkConnected() { ConnectivityManager mConnectivityManager = (ConnectivityManager) NetworkManager.getDefault().getApplication() .getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo mNetworkInfo = mConnectivityManager .getActiveNetworkInfo(); if (mNetworkInfo != null) { return mNetworkInfo.isAvailable(); } return false; } public static NetType getNetType() { ConnectivityManager mConnectivityManager = (ConnectivityManager) NetworkManager.getDefault().getApplication() .getSystemService(Context.CONNECTIVITY_SERVICE); if (mConnectivityManager == null) { return NetType.NONE; } NetworkInfo networkInfo = mConnectivityManager.getActiveNetworkInfo(); if (networkInfo == null) { return NetType.NONE; } int type = networkInfo.getType(); if (type == ConnectivityManager.TYPE_MOBILE) { if (networkInfo.getExtraInfo().toLowerCase().equals("cmnet")) { return NetType.CMNET; } else { return NetType.CMWAP; } } else if (type == ConnectivityManager.TYPE_WIFI) { return NetType.WIFI; } return NetType.NONE; }}
3).最后一招,在MainActivity对象或其他对象注册
NetworkManager.getDefault().init(getApplication()); // 这一句可以放在application中初始化NetworkManager.getDefault().registerObservable(this);@Overridepublic void finish() { super.finish(); NetworkManager.getDefault().registerListener(null);}
第一步解决主Activity监听网络层变化非常简单,容易理解,可是没有架构思想。只是一个只要会java基础思想的同鞋都会实现。那么我们如何使用到架构来搭建我们的项目呢?第二步我们留下篇文章讲解。https://blog.csdn.net/aaaaaaaaabaas/article/details/90514553
更多相关文章
- Android(安卓)的网络判定(网络连接类型和监听网络连接变化)
- android手机震动的节奏例子--Vibrator对象及周期运用
- Android(安卓)OpenGL纹理
- 【Android开发精要笔记】Android的Intent机制
- android内存问题详解--重要
- Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事
- Android与物联网设备通信-网络模型分层
- 多核时代的移动开发(一)-函数式编程思想到来
- 2016年末,Android岗位BAT等大厂面试题知识点小结(一)Android基础部