關(guān)于協(xié)程啟動的選擇
常規(guī)啟動方式
1.coroutineScope 使用在一個獨立的模塊或其他服務(wù)請求任務(wù)關(guān)聯(lián)后者影響較小時開啟一個子作用域, 例如一個獨立的服務(wù)請求和子系統(tǒng)任務(wù)處理 ??稍谌魏蔚胤介_啟,調(diào)用cancel來取消
fun getBanner() {
CoroutineScope(Dispatchers.IO).launch {
val respData = RepositoryFactory.getBanner()
when (respData.respCode) {
RespCode.SUCCESS -> bannerFlow.value = respData.data
RespCode.FAIL -> errorFlow.value = respData.errorMsg
RespCode.SERVICE -> serviceFlow.value = respData.error
}
}
}
2.GlobalScope 作用域為整個APP,LOG存儲,上傳之類
GlobalScope.launch {
// 在應(yīng)用程序的生命周期內(nèi)啟動一個新的協(xié)程并繼續(xù)
delay(1000L)
// 非阻塞的等待1秒鐘
println("World!")
}
3.lifecycleScope 綁定與Activity
//activity 推薦使用開啟協(xié)程
lifecycleScope.launch {
}
4.viewLifecycleOwner.lifecycleScope 綁定fragment 的onCreateView()到 onDestroyView()。
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
vm.bannerFlow.collect {
// update UI
tv_h.text = it.toString()
}
}
}
使用位置
Activity 啟動
lifecycleScope 綁定Activity、Fragment的整個生命周期onCreate()到onDestroy()這個范圍的生命周期(推薦)。
Fragment
viewLifecycleOwner.lifecycleScope 綁定fragment 的onCreateView()到 onDestroyView()這個范圍的生命周期(推薦)。
lifecycleScope也可使用但綁定的是onCreate()到onDestroy(),view銷毀,會導(dǎo)致crash。
綁定ViewModel
viewModelScope. 只能在ViewModel中使用,綁定ViewModel的生命周期.
參考:
https://juejin.cn/post/7395523104743096359
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。