android 不断监听代码,android 一行代码实现网络监听

94cb3485acbe

WechatIMG294.jpeg

欢迎大家下载我个人开发的app安琪花园

为什么我说一行代码就能实现网络监听呢?

94cb3485acbe

image.png

本人总结按照 “结论先行, 详细分析在后” 的逻辑,

先让大家的感性的认识, 然后理性的分析

结果

只需要在想要监听网络变化的方法上面添加相应的注解即可。

具体的实现原理,大家也可以参考EventBus通过Apt技术是如何实现。

为什么要将网络监听封装成一个库

网络监听可以说是在app中基本上会遇到的一个功能。

就我目前开发的项目而言,到处都在写网络监听的代码,感觉相当麻烦,

而且 代码冗余, 提高了耦合性,而且代码可读性也下降了。

自从写了这个库以后,以后项目里面要监听网络变化只需要添加注解即可

具体是如何使用的呢?

如果你的项目上线后是混淆过的, 那一定要注意:需要在用到网络监听的类上面添加keep注解防止混淆,以免上线后出问题。

例子:

94cb3485acbe

image.png

在混淆文件里面添加:

-keepclasseswithmembernames class * {

@com.richzjc.netannotation.* ;

}

在项目的根目录下面的build.gralde添加maven仓库。

maven { url "https://dl.bintray.com/richzjc/maven" }

其次是在module的build.gradle引用

如果项目用的kotlin 请将annotationProcessor 改成kapt

annotationProcessor 'com.richzjc:netChange_compiler:1.1.2'

implementation 'com.richzjc:network_change:1.0.9'

因为项目使用了apt的技术,在编译期会生成类,

因此需要在对应module下面的gradle文件添加如下配置

javaCompileOptions {

annotationProcessorOptions {

arguments = [ moduleName : project.getName() ]

}

}

则最后会生成NetChanger的类:

如:

public class NetChanger implements SubscribeInfoIndex {

private static final Map SUBSCRIBER_INDEX;

static {

SUBSCRIBER_INDEX = new HashMap();

List availableList;

List loseList;

List changeList;

availableList = new ArrayList();

loseList = new ArrayList();

changeList = new ArrayList();

availableList.add(new SubscribeMethod("test1", null));

loseList.add(new SubscribeMethod("test", null));

changeList.add(new SubscribeMethod("test2", NetType.AUTO));

changeList.add(new SubscribeMethod("test3", NetType.WIFI));

SUBSCRIBER_INDEX.put(MainActivity.class, new SimpleSubscribeInfo(availableList, loseList, changeList));

}

@Override

public Map getSubscriberInfo() {

return SUBSCRIBER_INDEX;

}

}

在使用这个库的时候需要在对应的Application下面初始化:

将apt生成的类添加到NetManager里面。 然后调用init方法

NetManager.addIndex(new NetChanger());

NetManager.init(this);

最后如果在MainActivity里面想要添加网络监听,则需要在MainActivity里面

添加注册与 反注册的方法:

如: 在Oncreate里面添加注册:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

NetManager.bind(this);

}

一般在ondestroy方法里面添加反注册

@Override

protected void onDestroy() {

super.onDestroy();

NetManager.unBind(this);

}

如果按照以上配置好了。 那么在MainActivity里面添加的代码

就能够监听到网络的变化。

详细说明

NetAvailable

监听到有网络

NetLose

监听没有网络

NetChange

该注解需要传一个netType

netType有四个取值可能

public enum NetType {

AUTO, WIFI, MOBILE, NONE;

}

当netType传为AUTO 就相当于NetAvailable

当netType传为NONE就相当于 NetLose

当netType传为MOBILE就相当于 监听除wifi以外的网络

当netType传为WIFI就相当于 监听wifi

相关文章

多学总比少学好

所谓 面试造飞机, 入职拧螺丝。 这句话一点也不假, 面试时的技术不仅仅 是 要学会用, 还得要知其原理。懂其原理,才能区分其技术水平, 而作为android开发的我们, java作为我们的开发语言。 所以面试官往往会问一些java底层的原理。这其中包括, java 多线程, 各种各样的锁机制, 以及cas, 原子性 的问题。

最近我在学习了这门课程后,发现确实还不错。对以后的面试的帮助还是蛮不错的。

94cb3485acbe

WechatIMG293.jpeg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值