好久没有写博客了,今天我又回来了,不知道大家是否还认识当年上海的那个半年小子,现在他已经移驾来到广州了,好久不见甚是想念,如果有机会大家可以来广州聚餐。如果不认识我的,可以关注我,后期还有干货等待着大家,让大家大开眼界。

那么接下来我会将我这么多年的架构思想进行总结,让大家能够少走点弯路,少做点错事。还有我接下来准备做一个培训网站,将我的思想融入到该网站里面,不管是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

 

 

更多相关文章

  1. Android(安卓)的网络判定(网络连接类型和监听网络连接变化)
  2. android手机震动的节奏例子--Vibrator对象及周期运用
  3. Android(安卓)OpenGL纹理
  4. 【Android开发精要笔记】Android的Intent机制
  5. android内存问题详解--重要
  6. Android中的Cursor到底是什么?如何理解Cursor的方法都在做什么事
  7. Android与物联网设备通信-网络模型分层
  8. 多核时代的移动开发(一)-函数式编程思想到来
  9. 2016年末,Android岗位BAT等大厂面试题知识点小结(一)Android基础部

随机推荐

  1. 使用js和ajax从django服务器检索数据
  2. 如何删除/更改JQuery UI自动完成帮助文本
  3. jQuery的deferred对象详解
  4. js和jquery使按钮失效为不可用状态的方法
  5. fullcalendar.js - 在按钮点击时删除事
  6. 将JSON结果返回给ajax请求的MVC ErrorHan
  7. jQuery append xmlNode 修改 xml 内容
  8. Mulit jQuery UI Datepickers具有不同的
  9. Mvc 5和实体框架6中的Jquery多文件上载问
  10. jQuery的宽度、内宽和外宽、高度、内高和