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

前言

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

项目地址

AndroidNetworkWatcher:github.com/xiong-it/An…

技术原理

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

用法

由于还没上传到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:github.com/xiong-it/An…

// TODO

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

猜你喜欢

转载自juejin.im/post/5da8254e5188252fac2c784f