題記
畢業3年了!猶豫!彷徨!最近處於一個瓶頸期,公司的代碼已經得心應手,但是由於業務原因,網絡加載和最新的開源庫用的較少,感覺少點什麼,就想沉下心來整理一個通用的網絡加載框架,流行的技術重新刷一遍,本文就記錄下關鍵節點。
1 準備工作
初步敲定MVP+retrofit+RxJava作爲基礎,言不多說,開始拼湊~
MVP的好處不用贅述了,什麼業務邏輯與UI分離一類的等等,隨便百度一片博客都講得天花亂墜,如需細究—請點這裏。我們這裏要做一個通用的lib方便隨時引用。接下來準備工作開始。
1.1 MVpHelper
推薦一下這個插件,直接在File->Setting->Plugs裏面搜索就能直接下載。這個插件好處是能夠快速生成model,view,presenter。
入上圖所示,需要新建一個directory,新建一個XXContract,放在右邊類名上 alt+insert-> MvpHelper,就會直接分包生成好XX的MVP模板類。
1.2 Butterknife
Butterknife作爲View注入框架再好用不過了,能夠省略很多代碼,所以框架考入引用。
gradle引用:
//butterknife
implementation 'com.jakewharton:butterknife:10.0.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:10.0.0'
詳細使用:官網
1.3 Preconditions
Google Guava中提供了一個Preconditions類,用於校驗入參的正確性。主要使用在進行業務邏輯代碼前進行前置判斷(參數檢驗)。並且避免了冗長的if語句。guava將所有檢驗的API都放置於Preconditions類中。guava裏面還有有很多有意思的東西,有空還是要捋一遍。
方法聲明(不包括額外參數 ) | 描述 | 檢查失敗時拋出的異常 |
---|---|---|
checkNotNull(T) | 檢查value是否爲null,該方法直接返回value,因此可以內嵌使用checkNotNull。 | NullPointerException |
checkArgument(boolean) | 檢查boolean是否爲true,用來檢查傳遞給方法的參數。 | IllegalArgumentException |
1.4 Retrofit+RxXX
1.4.1 Retrofit
Retrofit是square開源的網絡Restful請求框架,底層是基於okhttp的,同時也是基於動態代理來實現的。開發者只需要定義接口就可以了,使用註解可以表示該接口請求的請求方式、參數、url等,同時也通俗易懂,減少代碼量。
Retrofit
1.4.2 RxXX(reactivex)系列
爲什麼說reactivex系列呢,因爲我們要引用的有RxJava,RxAndroid,RxLifecycle。
implementation "io.reactivex.rxjava3:rxjava:3.x.y"
RxJava作爲一個觀察者模式的實現已經流行的好久,符合響應式編程的潮流,好處多多。
- 簡化邏輯,解耦了各個模塊操作(stream優雅的執行操作)
- 操作符強大,可以實現各種功能(API完善,操作多樣化)
- 線程切換方便(發送和接收切換線程簡單)
- 報錯穩固(固定的Error方法回調)
implementation ' com.trello.rxlifecycle3:rxlifecycle-android-lifecycle:3.0.0 '
如果引用了RxJava,在使用的時候,如果沒有及時解除訂閱,在退出View的時候,異步線程還在執行。這時對View還存在引用,相互引用導致死鎖,此時就會產生內存泄漏。
RxLifecycle就是爲了解決rxjava導致的內存泄漏而產生的!
2 代碼上手
代碼下載
emmmm…最近突然有點忙,先把搞好的工程代碼上傳,文字一點一點補吧。