湯富彬
摘要:隨著安卓開發技術的成熟,Android技術選型模式也有很多,第三方庫也層出不窮。筆者針對開發的用到的第三方庫進行了整合,以到達快速開發的目的。當項目越龐大、復雜,參與的研發人員越來越多的時候,采用mvp模式的優勢就明顯起來,MVP模式(Model-View-Presenter)可以說是MVC模式(Model-View-Controller)在Android開發上的一種變種、進化模式。Mvp模式選用Kotlin語言作為開發語言該語言相比于Java語言的優勢明顯,Kotlin 有更強大的類型推斷,也省去了末尾的省略號,各種方法的調用也更簡單了。而且在Android中,有一個工具叫kotlin-android-extensions來幫助省略findViewByid的代碼,直接使用在xml文件中寫的id名字來獲取控件的引用,使得代碼的可讀性的提高,也使代碼更加簡潔。
關鍵詞:Kotlin;MVP框架;Android
中圖分類號:TP311? ? ? ? 文獻標識碼:A
文章編號:1009-3044(2019)28-0090-02
1 Android快速開發模式的語言選擇
Android快速開發選用Kotlin作為開發語言該語言相比于Java語言有很大優勢,Kotlin 有更強大的類型推斷,也省去了末尾的省略號,各種方法的調用也更簡單。而且在Android中,有一個工具叫kotlin-android-extensions來幫助省略findViewByid的代碼,直接使用在xml文件中寫的id名字來獲取控件的引用,使得代碼的可讀性得到提高,也使得代碼更加簡潔。
Kotlin的空指針安全可控,空指針檢查提前到了編譯時,使程序的空指針得到了明顯的改善。只是與java互相調用的時候,不太好檢測,這是因為java的代碼內不能檢測返回的是否為空。因此在于java代碼互相調用的時候需要特別注意。大致來講,Kotlin的空指針安全還是會使程序得到良好的改善。
其次kotlin語言采用實用、整潔、高效率的程序輸入,由于引入了object,更方便地創建單例。相比于java的單例,不需要考慮延遲初始化,同步的問題,在語言的層面上為提供了方便。引入data? class,創建實體數據類,避免了在去寫getter、setting、toString等方法。引入了擴展方法,可以用來擴展已定義類型中的方法成員。
kotlin語言對Lambda和函數式編程更好的支持,Lambda表達式可以省去創建很多的匿名內部類。對函數式編程的友好支持,便于寫出更加穩定的方法和代碼。從客觀上說,Kotlin的語法和特性讓代碼更具有描述性。而Kotlin的標準庫和引入擴展方法加強了描述性。但是總的來說,代碼的可讀性還是靠編碼人員的能力。
kotlin成為了Android的官方語言,得到官方的宣傳和支持,對于我們來說,Kotlin版本的庫和框架會越來越多,我們使用也會越來越方便。
2 使用MVP的架構模式來分離界面和數據處理
2.1 Mvp模式的優勢
MVP相比于原來的MVC模式代碼更簡潔,特別說明的是簡潔是邏輯的簡潔,而不是代碼本身。比如原來的MVC中,Activity 作為Controller會寫很多與本身職責不一樣的代碼,會造成Activity之中邏輯混亂,而MVP中是把Activity作為View層,只負責了界面的展示,而把MVC中的Controller職責分離到了Persenter中去,使得邏輯更加清晰。
使用MVP可以分離View和Model的交互,在中間加入了一個Persenter層,使各自的職責更加清晰。為之后的維護減輕負擔,因為可以改變其中的一層,而不影響其他的層次。更加方便單元測試,由于職責的清晰,可以單獨的測試各個層面的代碼。
2.2 使用RxJava+RxAndroid
使用這個框架的優勢就是,可以處理并行的發送請求,使用靈活,線程切換簡單,也不需要自己維護線程池,減少邏輯層次。目前也有很多的兼容RxJava的其他框架可以選擇,比如:RxBinding、RxPermissions、RxBus、Retrofit。
2.3 選用Retrofit2.0作為網絡框架,并集中的處理服務器返回的數據
目前主流的網絡框架有Android-Async-Http、Volley、OkHttp3、Retrofit2.0。
其中Android-Async-Http 作者已停止維護,放棄。Volley不適用下載和上傳文件的網絡操作。適合輕量級網絡交互,網絡請求頻繁,傳輸數據量小的場景。而Okhttp是一個封裝類似HttpUrlConnection的一個東西,Android 4.4之后HttpUrlConnnection部分實現已經與Okhttp一致,證明了Okhttp的性能,主要的特點有:共享同一個socket來處理同一個服務器的所有請求,支持同步、異步請求,保存cookie到應用的sharepreference ,封裝了線程池、數據轉換、參數使用、錯誤處理等,無縫的支持GZIP來減少數據流量,使用比HttpUrlConnection更方便,緩存響應數據來較少重復的網絡請求,能從很多常用的連接問題中自動恢復,解決了代理服務器問題和SSL握手失敗問題,基于NIO和okio,所以性能更好,請求、處理速度快。Retrofit2.0是基于Okhttp的一個框架,具備了Okhhtp的所有優點,它可以通過注解配置請求,提供了Rxjava的支持。所以選用此框架的最好的選擇。
2.4 使用AndroidUtilCode作為工具類
這個工具類目前在github上已有22k+的star,具有很強的集合性,此工具類包括緩存,圖片,權限,文件,單位轉換,編解碼等等的集成,可以通過自身需要進行裁剪。基本上覆蓋了開發過程中需要的各種工具類。
2.5 其他
選用Gson作為Json的解析框架。Json的解析框架主要有:Fastjson和Gson,就使用的方便性上來說,兩大框架基本一致,Fastjson比Gson速度更快,但是由于Gson包的體積比Fastjson更小,而Retrofit2.0只支持Gson,所有選擇Gson來作為json解析框架。選擇RxPermissions框架來處理動態處理權限,由于Android自身的動態強求權限,過于復雜,不利于解耦。
3 快速開發mvp模式的搭建
首先著手于MVP模式基類BaseAcitivity、BasePresenter、和IBaseView的創建,其次創建網絡的請求框架的設置類和根據具體的接口返回數據的統一處理,包裝第三方框架,方便以后在項目中替換框架。具體代碼如下:
總之,對于安卓快速開發的MVP模式,也可以稱之為結構,國外普遍直接稱為Android MVP,除此有的稱為MVP Pattern或者MVP Framework/Architecture,筆者認為這應該算是一種代碼風格(Code Style),在分類上應該比較類似設計模式(Design Pattern),Android常規的開發模式經常被稱為MV模式(Model-View),引入數據綁定后的MVVM模式(Model-View-ViewModel)相比較,一個Activity可以包含一個以上的Presenter,MVP的主要特點就是把Activity里的許多邏輯都抽離到View和Presenter接口中去,并由具體的實現類來完成。這種寫法雖然多了許多IView和Presenter,但是需要什么業務就new什么樣的Presenter,方便靈活,在未找到替代mvp模式之前,mvp模式應用于快速開發andorid優勢明顯。
參考文獻:
[1] 何紅輝,關愛民.Android源碼設計模式解析與實戰[M].北京:人民郵電出版社,2015.
[2] 楊靖,洪蕾.MVP設計模式研究及在Android中的設計[J].科技創新導報,2016(34).
[3] 劉升貴.基于MVP模式的Android應用程序實現及其單元測試研究[J].福建電腦,2017(7).
[4] 郎志超.基于MVP模式的SAR圖像融合系統設計與實現[J].機電工程,2010(1).
【通聯編輯:唐一東】