Kotlin開發(fā)如何正確選擇協(xié)程(GlobalScope,coroutineScope,lifecycleScope ,viewModelScope)

關(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ù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容