kotlin的定義
對我來說就是跟線程一樣的東西,是個線程框架,讓開發者更好的處理併發,以及解決回調問題
協程的使用
在app的build.gradle中添加依賴
kotlin {
experimental {
coroutines 'enable'
}
}
dependencies {
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0'
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.0'
}
線程切換
創建協程,並指定運行的線程
GlobalScope.launch (Dispatchers.IO){//切換到IO線程執行
saveToDatabase(data)
}
GlobalScope.launch (Dispatchers.Main){//切換到Main線程執行
updateViews(data)
}
結合使用
GlobalScope.launch (Dispatchers.Main){
val token = api.getToken()//網絡請求:後臺線程
val user = api.getUser(token)//網絡請求:後臺線程
nameTv.text = user.name //更新UI:主線程
}
當然,還有併發的網絡請求
GlobalScope.launch (Dispatchers.Main){
val avaTar = async { api.getAvatar(user) }//獲取用戶頭像
val logo = async { api.getCompanyLogo(user) }//獲取公司logo
val merged = suspendingMerged(avaTar,logo)//合併
show(merged)//展示
}
也可以通過withContext函數實現多線程的協作
GlobalScope.launch (Dispatchers.Main){
withContext(Dispatchers.IO){
……
}
……
withContext(Dispatchers.IO){
……
}
……
}
withContext函數會自動切回調用它的線程,可以把函數放進方法裏面,使代碼看起來更加簡潔