最近有小夥伴問我有沒有一個MVP+Dagger2+Retrofit2.0+Rxjava的案例,本身還沒徹底集合實現。今天就介紹一個開源項目:owspace。基於MVP+Dagger2+Retrofit2.0+Rxjava的一款APP供你們去學習和參考。java
owspace是一款高仿單讀的APP,API接口經過非法手段獲取。react
MVP模式android
Retrofit2.0 + rxjavagit
模型與視圖徹底分離,咱們能夠修改視圖而不影響模型github
能夠更高效地使用模型,由於全部的交互都發生在一個地方——Presenter內部sql
咱們能夠將一個Presenter用於多個視圖,而不須要改變Presenter的邏輯。這個特性很是的有用,由於視圖的變化老是比模型的變化頻繁。c#
若是咱們把邏輯放在Presenter中,那麼咱們就能夠脫離用戶接口來測試這些邏輯(單元測試)bash
下面是mvp的架構圖:微信
關於mvp還能夠參考:session
看看Dagger2 的流程:
Dagger2的優勢
全局對象實例的簡單訪問方式
和ButterKnife 庫定義了view,事件處理以及資源的引用同樣,Dagger2 提供全局對象引用的簡易訪問方式。聲明瞭單例的實例均可以使用@inject進行訪問。好比下面的MyTwitterApiClient 和SharedPreferences 的實例:
public class MainActivity extends Activity {
@Inject
MyTwitterApiClient mTwitterApiClient;
@Inject
SharedPreferences sharedPreferences;
public void onCreate(Bundle savedInstance) { // assign singleton instances to fields
InjectorClass.inject(this);
}複製代碼
複雜的依賴關係只須要簡單的配置
Dagger2 會經過依賴關係而且生成易懂易分析的代碼。之前經過手寫的大量模板代碼中的對象引用將會由它給你建立並傳遞到相應對象中。所以你能夠更多的關注模塊中構建的內容而不是模塊中的對象實例的建立順序。
讓單元測試和集成測試更加方便
由於依賴關係已經爲咱們獨立出來,因此咱們能夠輕鬆的抽取出不一樣的模塊進行測試。依賴的注入和配置獨立於組件以外。由於對象是在一個獨立、不耦合的地方初始化,因此當注入抽象方法的時候,咱們只須要修改對象的實現方法,而不用大改代碼庫。依賴能夠注入到一個組件中:咱們能夠注入這些依賴的模擬實現,這樣使得測試更加簡單。
做用域實例(Scoped instances)
咱們不只能夠輕鬆的管理全局實例對象,也能夠使用Dagger2中的scope定義不一樣的做用域。(好比根據user session,activity的生命週期)
效果圖:
單讀這個文藝的APP本人比較喜歡,一時衝動就抓取了數據,反編譯了APP。so,API接口是經過非法手段獲取,嚴禁商用,違者後果自負。
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile(name: 'SildeMenulibrary-release', ext: 'aar')
compile(name: 'ObservableScrollView-release', ext: 'aar')
compile 'com.android.support:appcompat-v7:24.2.1'
compile 'com.jakewharton:butterknife:7.0.1'
compile 'com.google.code.gson:gson:2.6.2'
compile 'net.danlew:android.joda:2.9.3'
compile 'com.squareup.okhttp3:okhttp:3.4.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.squareup.retrofit2:retrofit:2.1.0'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
compile 'com.squareup.retrofit2:converter-gson:2.1.0'
compile 'com.squareup.sqlbrite:sqlbrite:0.7.0'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'io.reactivex:rxjava:1.1.6'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.github.bumptech.glide:glide:3.7.0'
compile 'com.orhanobut:logger:1.15'
compile 'com.elyeproj.libraries:loaderviewlibrary:1.2.1'
compile 'in.srain.cube:ultra-ptr:1.0.11'
compile 'com.android.support:recyclerview-v7:24.2.1'
compile 'com.android.support:design:24.2.1'
compile 'org.jsoup:jsoup:1.7.3'
compile 'pub.devrel:easypermissions:0.2.0'
compile 'com.wang.avi:library:2.1.3'
compile 'com.google.dagger:dagger:2.7'
apt 'com.google.dagger:dagger-compiler:2.7'
compile 'org.glassfish:javax.annotation:10.0-b28'
compile 'uk.co.chrisjenx:calligraphy:2.2.0'複製代碼
項目地址:
若是你以爲此文對您有所幫助,歡迎入羣 QQ交流羣 :644196190
微信公衆號:終端研發部