協(xié)程的基本使用
GlobalScope.launch
生命周期與進程一致,且無法取消
runBlocking
會阻塞線程,一般在測試階段可以使用
val coroutineScope = CoroutineScope(context)
coroutineScope.launch
通過context參數(shù)去管理和控制協(xié)程的生命周期
用法
val coroutineScope = CoroutineScope(context)
coroutineScope.launch(Dispatchers.IO) {
? ? ? ? 通過Dispatchers.IO參數(shù)把任務切換到IO線程執(zhí)行
}
coroutineScope.launch(Dispatchers.Main) {
? ? ? ? 通過Dispatchers.Main參數(shù)把任務切換到Main線程執(zhí)行
}
使用withContext方法
該方法可以切換到指定線程,并在閉包內的邏輯執(zhí)行結束后,自動把線程切換回去繼續(xù)執(zhí)行
corountineScope.launch(Dispatchers.Main) {
? ? ? ? val image = withContext(Dispatchers.IO) {
? ? ? ? ? ? ? ? getImage(imageId)
????????}
}
使用launch、async等方法創(chuàng)建的協(xié)程,在執(zhí)行到某個suspend方法時會從正在執(zhí)行它的線程上脫離,互相脫離后的線程和協(xié)程會分別執(zhí)行不同的任務。
使用suspend標記的方法,只能執(zhí)行在協(xié)程代碼塊中。
獲取協(xié)程的返回值
協(xié)程是一種異步概念,需要一些特殊操作才能獲取返回值。方法如下
async / await
主要流程是使用async開啟協(xié)程,然后調用async返回的Defered對象的await方法獲取協(xié)程運算的結果。文章來源:http://www.zghlxwxcb.cn/news/detail-814232.html
跟launch相比,async是帶返回值的。文章來源地址http://www.zghlxwxcb.cn/news/detail-814232.html
到了這里,關于Kotlin協(xié)程學習之-02的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!