android 一行代碼實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽

WechatIMG294.jpeg

歡迎大家下載我個(gè)人開發(fā)的app安琪花園

為什么我說一行代碼就能實(shí)現(xiàn)網(wǎng)絡(luò)監(jiān)聽呢?

image.png

本人總結(jié)按照 “結(jié)論先行阳距, 詳細(xì)分析在后” 的邏輯疫蔓,
先讓大家的感性的認(rèn)識(shí), 然后理性的分析

結(jié)果

只需要在想要監(jiān)聽網(wǎng)絡(luò)變化的方法上面添加相應(yīng)的注解即可身冬。
具體的實(shí)現(xiàn)原理衅胀,大家也可以參考EventBus通過Apt技術(shù)是如何實(shí)現(xiàn)。

為什么要將網(wǎng)絡(luò)監(jiān)聽封裝成一個(gè)庫

網(wǎng)絡(luò)監(jiān)聽可以說是在app中基本上會(huì)遇到的一個(gè)功能酥筝。
就我目前開發(fā)的項(xiàng)目而言滚躯,到處都在寫網(wǎng)絡(luò)監(jiān)聽的代碼,感覺相當(dāng)麻煩嘿歌,
而且 代碼冗余掸掏, 提高了耦合性,而且代碼可讀性也下降了宙帝。
自從寫了這個(gè)庫以后丧凤,以后項(xiàng)目里面要監(jiān)聽網(wǎng)絡(luò)變化只需要添加注解即可

具體是如何使用的呢?

如果你的項(xiàng)目上線后是混淆過的步脓, 那一定要注意:需要在用到網(wǎng)絡(luò)監(jiān)聽的類上面添加keep注解防止混淆愿待,以免上線后出問題。
例子:


image.png

在混淆文件里面添加:

-keepclasseswithmembernames class * {
     @com.richzjc.netannotation.* <methods>;
 }

在項(xiàng)目的根目錄下面的build.gralde添加maven倉庫靴患。

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

其次是在module的build.gradle引用

如果項(xiàng)目用的kotlin 請(qǐng)將annotationProcessor 改成kapt
annotationProcessor 'com.richzjc:netChange_compiler:1.1.2'
implementation 'com.richzjc:network_change:1.0.9'

因?yàn)轫?xiàng)目使用了apt的技術(shù)仍侥,在編譯期會(huì)生成類,
因此需要在對(duì)應(yīng)module下面的gradle文件添加如下配置

javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ moduleName : project.getName() ]
            }
        }

則最后會(huì)生成NetChanger的類:
如:

public class NetChanger implements SubscribeInfoIndex {
  private static final Map<Class, SimpleSubscribeInfo> SUBSCRIBER_INDEX;

  static {
    SUBSCRIBER_INDEX = new HashMap<Class, SimpleSubscribeInfo>();
    List<SubscribeMethod> availableList;
    List<SubscribeMethod> loseList;
    List<SubscribeMethod> 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<Class, SimpleSubscribeInfo> getSubscriberInfo() {
    return SUBSCRIBER_INDEX;
  }
}

在使用這個(gè)庫的時(shí)候需要在對(duì)應(yīng)的Application下面初始化:
將apt生成的類添加到NetManager里面蚁廓。 然后調(diào)用init方法

NetManager.addIndex(new NetChanger());
NetManager.init(this);

最后如果在MainActivity里面想要添加網(wǎng)絡(luò)監(jiān)聽访圃,則需要在MainActivity里面
添加注冊(cè)與 反注冊(cè)的方法:

如: 在Oncreate里面添加注冊(cè):

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        NetManager.bind(this);
    }

一般在ondestroy方法里面添加反注冊(cè)

@Override
    protected void onDestroy() {
        super.onDestroy();
        NetManager.unBind(this);
    }

如果按照以上配置好了。 那么在MainActivity里面添加的代碼
就能夠監(jiān)聽到網(wǎng)絡(luò)的變化相嵌。

詳細(xì)說明

NetAvailable

監(jiān)聽到有網(wǎng)絡(luò)

NetLose

監(jiān)聽沒有網(wǎng)絡(luò)

NetChange

該注解需要傳一個(gè)netType
netType有四個(gè)取值可能

public enum NetType {
    AUTO, WIFI, MOBILE, NONE;
}

當(dāng)netType傳為AUTO 就相當(dāng)于NetAvailable
當(dāng)netType傳為NONE就相當(dāng)于 NetLose
當(dāng)netType傳為MOBILE就相當(dāng)于 監(jiān)聽除wifi以外的網(wǎng)絡(luò)
當(dāng)netType傳為WIFI就相當(dāng)于 監(jiān)聽wifi

gitHub地址

相關(guān)文章

kotlin DSL開發(fā)
android 面試題
android 夜間模式的切換
快速獲取Bundle里面參數(shù)
android EventBus源碼閱讀
AOP之動(dòng)態(tài)代理原理
Handler源碼理解
IOC框架之Dagger詳解

多學(xué)總比少學(xué)好

所謂 面試造飛機(jī)腿时, 入職擰螺絲。 這句話一點(diǎn)也不假饭宾, 面試時(shí)的技術(shù)不僅僅 是 要學(xué)會(huì)用, 還得要知其原理批糟。懂其原理,才能區(qū)分其技術(shù)水平看铆, 而作為android開發(fā)的我們徽鼎, java作為我們的開發(fā)語言。 所以面試官往往會(huì)問一些java底層的原理弹惦。這其中包括否淤, java 多線程, 各種各樣的鎖機(jī)制棠隐, 以及cas石抡, 原子性 的問題。

最近我在學(xué)習(xí)了這門課程后助泽,發(fā)現(xiàn)確實(shí)還不錯(cuò)啰扛。對(duì)以后的面試的幫助還是蠻不錯(cuò)的嚎京。

WechatIMG293.jpeg

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市隐解,隨后出現(xiàn)的幾起案子鞍帝,更是在濱河造成了極大的恐慌,老刑警劉巖煞茫,帶你破解...
    沈念sama閱讀 211,376評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件帕涌,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡溜嗜,警方通過查閱死者的電腦和手機(jī)宵膨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炸宵,“玉大人辟躏,你說我怎么就攤上這事⊥寥” “怎么了捎琐?”我有些...
    開封第一講書人閱讀 156,966評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長裹匙。 經(jīng)常有香客問我瑞凑,道長,這世上最難降的妖魔是什么概页? 我笑而不...
    開封第一講書人閱讀 56,432評(píng)論 1 283
  • 正文 為了忘掉前任籽御,我火速辦了婚禮,結(jié)果婚禮上惰匙,老公的妹妹穿的比我還像新娘技掏。我一直安慰自己,他們只是感情好项鬼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,519評(píng)論 6 385
  • 文/花漫 我一把揭開白布哑梳。 她就那樣靜靜地躺著,像睡著了一般绘盟。 火紅的嫁衣襯著肌膚如雪鸠真。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,792評(píng)論 1 290
  • 那天龄毡,我揣著相機(jī)與錄音吠卷,去河邊找鬼。 笑死沦零,一個(gè)胖子當(dāng)著我的面吹牛撤嫩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蠢终,決...
    沈念sama閱讀 38,933評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼序攘,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了寻拂?” 一聲冷哼從身側(cè)響起程奠,我...
    開封第一講書人閱讀 37,701評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎祭钉,沒想到半個(gè)月后瞄沙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,143評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡慌核,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,488評(píng)論 2 327
  • 正文 我和宋清朗相戀三年距境,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垮卓。...
    茶點(diǎn)故事閱讀 38,626評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡垫桂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粟按,到底是詐尸還是另有隱情诬滩,我是刑警寧澤灭将,帶...
    沈念sama閱讀 34,292評(píng)論 4 329
  • 正文 年R本政府宣布疼鸟,位于F島的核電站,受9級(jí)特大地震影響庙曙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吴攒,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,896評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望茴厉。 院中可真熱鬧,春花似錦嗜闻、人聲如沸样眠。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽束倍。三九已至甥桂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間糕簿,已是汗流浹背狡孔。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工辱揭, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留亥鬓,地道東北人域庇。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓庵朝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親椎瘟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,494評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容