AndroidNetworkWatcher:简化网络监听业务代码

Posted MichaelX_Blog

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了AndroidNetworkWatcher:简化网络监听业务代码相关的知识,希望对你有一定的参考价值。

前言

android开发中经常遇到需要监听网络变化的场景,比如播放,比如访问网络时进行断网提示,于是有了今天的AndroidNetworkWatcher。

项目地址

AndroidNetworkWatcher:https://github.com/xiong-it/AndroidNetworkWatcher

技术原理

主要是将网络变化监听广播进行了封装,同时定义运行时注解,在网络变化时调用业务层代码,通知网络变化。

用法

由于还没上传到jcenter,无法通过gradle远程依赖,读者可以自行下载源码本地依赖,或者参考源码自己封装。

  1. 在Application中初始化Watcher:
public class App extends Application 
    @Override
    public void onCreate() 
        super.onCreate();
        NetworkStateWatcher.getDefault().init(this);
    

  1. 注册观察者,以Activity举例
@Override
protected void onStart() 
    super.onStart();
    // 注册网络监听,传入Object类型参数
    NetworkStateWatcher.getDefault().registerObserver(this);

  1. 注销观察者,以Activity举例
@Override
    protected void onStop() 
        super.onStop();
        // 注销网络监听,传入Object类型参数
        NetworkStateWatcher.getDefault().unRegisterObserver(this);
    
  1. 定义接收网络变化的函数(2种方法)

    4.1 第一种:监听所有网络变化

    /**
     * 网络发生变化
     *
     * @param type 网络类型
     */
    @NetworkStateChanged(notifyOnAppStart = false)
    void onNetworkStateChanged(int type) 
        switch (type) 
            case NetworkTypeEnum.NETWORK_2G:
            case NetworkTypeEnum.NETWORK_3G:
            case NetworkTypeEnum.NETWORK_4G:
                // 切换到移动网络
                break;
    
            case NetworkTypeEnum.NETWORK_WIFI:
                // 切换到wifi
                break;
    
            case NetworkTypeEnum.NETWORK_NO:
                // 断网
                break;
        
    
    

    4.2 第二种:监听特定的网络变化

    // 监听网络切换到wifi
    @OnNetworkTypeChangedTo(type = NETWORK_WIFI)
    void onWifiConnected() 
        Toast.makeText(  this, "NetworkStateChanged>>>WIFI", Toast.LENGTH_SHORT).show();
    
    
    // 监听网络切换到移动网络
    @OnNetworkTypeChangedTo(type = NetworkTypeEnum.NETWORK_MOBILE)
    void onMobileNetworkConnected() 
        Toast.makeText(this, "NetworkStateChanged>>>Mobile networks", Toast.LENGTH_SHORT).show();
    
    
  2. 在app主界面停止网络监听
    在退出app时,即在app的Activity栈的最后一个Activity的onDestroy方法中停止网络监听,lib中也就是注销网络监听广播。

    @Override
    protected void onDestroy() 
        super.onDestroy();
        // 在app主界面/栈中最后一个Activity停止网络监听
        NetworkStateWatcher.getDefault().stopWatch();
    
    

结语

也没用什么高大上的技术,观察者、注解、反射、广播接收者。仅此而已,但却可以简化业务层代码,方便你我他。
AndroidNetworkWatcher:https://github.com/xiong-it/AndroidNetworkWatcher

// TODO

  1. 上传到jcenter仓库,方便gradle远程依赖
  2. 利用apt或者tranform进一步简化业务代码
  3. 收集issue意见,欢迎讨论交流

以上是关于AndroidNetworkWatcher:简化网络监听业务代码的主要内容,如果未能解决你的问题,请参考以下文章

MyBatis-Plus被网友推荐好用,它可以解决多表关联的问题吗?

简化SpringBoot框架打包体积

简化SpringBoot框架打包体积

springboot+maven 集成lombok简化代码

计网超网路由NAT协议

计网超网路由NAT协议