iT邦幫忙

2021 iThome 鐵人賽

DAY 11
0
Mobile Development

Kotlin Android 30天,從 0 到 ML (Machine Learning)系列 第 11

Kotlin Android 第11天,從 0 到 ML - Kotlin Coroutine

前言:

Kotlin Coroutine , Coroutin (中文翻  “協程” )這個詞在android 常常會用到和聽到, 
那到底是什麼意思呢? Kotlin Coroutin 在官網的說明是一個輕量的執行緒,可以協同排程其他的工作
順利的 執行,不會佔用主線程,在背景排程執行。

在Android 上就不會佔用主線程,造成UI卡頓,進而變成ANR。
   

https://ithelp.ithome.com.tw/upload/images/20210916/20121643OZC6M9xdzH.png

大綱:

第一支 Coroutine
GlobalScope.launch

fun main() {
    GlobalScope.launch {  //在背景啟動一個新的協程
       delay(1000L)
       println("World!")
    }
    println("Hello,")  //主線程會馬上執行
}   

https://ithelp.ithome.com.tw/upload/images/20210916/20121643wDTkpZYVGQ.png

runBlocking and Dispatchers

fun main() {
    GlobalScope.launch {  //在背景啟動一個新的協程
       delay(1000L)
       println("World!")
    }

    runBlocking (Dispatchers.IO){ //阻塞住主線程,在io線程上執行 ,用main線程就anr了
       delay(500L)
       println("Kotlin World!")
    }
    println("Hello,") //被阻塞住了主線程,就沒有馬上執行
}         

https://ithelp.ithome.com.tw/upload/images/20210916/20121643f1qgK1e7lR.png

suspend fun

fun main() {
    GlobalScope.launch { //在背景啟動一個新的協程,並確保子線程
       delay(1000L)
       println("World!")
       //等待子線程執行結束
       jointest()
    }
    println("Hello,") //主線程會馬上執行
}    

suspend fun jointest()= coroutineScope{
    launch {
        delay(4000L)
        println("World! 2")
     }
  
    launch {
        delay(2000L)
        println("World! 1")
    }
    println("Hello,")
}

https://ithelp.ithome.com.tw/upload/images/20210916/20121643OID2bW51Ei.png

Coroutine context and Cancel job

fun main(){
    val job = GlobalScope.launch {
           
        GlobalScope.launch {
           println("job1")
           delay(1000)
           println("job1 delay 1000")
         }
         //協程的上下文   
         launch {
           delay(100)
           println("job2 delay100")
           delay(1000)
           println("job2: delay1000")
          }
     }

     job.cancel() // 請求執行"取消",job2就沒執行了

      println("main: Hello")
}

https://ithelp.ithome.com.tw/upload/images/20210916/20121643gF1ohCS8hY.png

結論:

後續會有結合 Android jetpack ViewModel LiveData 的實作範例 

參考

https://kotlinlang.org/docs/coroutines-guide.html


上一篇
Kotlin Android 第10天,從 0 到 ML - Kotlin 與 Java 互動操作
下一篇
Kotlin Android 第12天,從 0 到 ML - ConstraintLayout
系列文
Kotlin Android 30天,從 0 到 ML (Machine Learning)30

尚未有邦友留言

立即登入留言