漸漸的程序員變懶了,而後一個個框架,一個個插件應運而生,而後讓程序員在愈來愈懶的道路上永不中止,美其名曰:減小咱們對於細節的沒必要要關注,而將更大的經歷關注在業務層次,提升開發速度。而這種說法獲得了絕大數人的贊同,結果就是:我在這邊開發框架使用的分享。好壞暫且不論,就開發效率和協同開發方面來講的確是利器,讓咱們較少的關注結構和協同方面,爲公司節省很多時間,也不失爲居家旅行的一道良方。閒話少敘,本篇主要介紹Google推出的 Android Architecture Component 中的 MVVM-LiveData-kotlin 。若說的不對的地方,還望各位看官指出糾正。java
MVVM已經出來了較長一段時間了,而這個模式則是將 MVVM、kotlin 兩個結合而造成,顯得十分合適,kotlin自己的簡短、lambda寫法配合LiveData的觀察者模式使得代碼的結構和層次更加鮮明。MVVM-LiveData_kotlin這一結構包含了多個部份內容,以下就該結構各個部分進行簡要的分析、並將Retrofit與LiveData進行配對實現網絡請求(替代RxJava+Retrofit).python
本篇難免落入俗套的介紹下MVVM的背景介紹之中。android
首先談談什麼是mvvm,android開發中有關於界面和數據的綁定這塊一直都是研究的重點。隨着APP的界面愈來愈多樣、業務變得愈來愈複雜,一個界面上所須要處理的數據也就愈來愈多,這時候傳統的findView方式顯然使得開發者產生不滿,因此有butterknife這樣的註解綁定控件的出現,而業務與界面狀態的不斷變化處理漸漸冗長,就致使了Databinding這類數據綁定的出現,而MVVM就是基於databinding這類綁定式的APP開發框架。其結構以下:git
MVVM 的使用是Google 推出的 Android Architecture Component 實現,其中所包含的組件以下:程序員
@Database(entities = arrayOf(Task::class), version = 1)
abstract class ToDoDatabase : RoomDatabase() {
abstract fun taskDao(): TasksDao
companion object {
private var INSTANCE: ToDoDatabase? = null
private val lock = Any()
fun getInstance(context: Context): ToDoDatabase {
synchronized(lock) {
if (INSTANCE == null) {
INSTANCE = Room.databaseBuilder(context.applicationContext,
ToDoDatabase::class.java, "Tasks.db")
.build()
}
return INSTANCE!!
}
}
}
}
複製代碼
Lifecycle-aware components
Lifecycle-aware是Google用於管理生命週期的一個組件.用於處理MVVM中數據綁定的狀態變化,讓咱們不須要關心View的狀態改變,MVVM 中的View層 FragmentActivity、androidx.fragment.app.Fragment 組件實現了該組件。github
ViewModels
MVVM框架的VM層,用於實現與view的雙向綁定,並操控model的一個組件.viewmodel主要是用於將MVVM的界面與邏輯進行解耦分離,便於代碼的後期維護,其實現以下:數據庫
class BaseViewModel : ViewModel() {
// viewmodel實現層
}
複製代碼
LiveData
Google開發的一個觀察者模式的組件,能夠替代RxJava的部分功能,是一個相似RxJava的組件。網絡
Databinding
Databinding 是用於界面與數據的綁定使用的,先已在Andorid Studio內置,可直接經過在build.gradle設置以下代碼開啓:app
android {
...
dataBinding {
enabled = true
}
}
複製代碼
有了上述的組件就可一一開始組件MVVM.框架
歡迎關注個人我的博客Enjoytoday,有更新更全的python、Kotlin、Java、Gradle開發相關博客更新!