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


<<:  Day02: 02 - 前端 - 开启专案、页面刻划、bootstrap-vue使用

>>:  Android学习笔记07

[Day_6]资料型别、变数与运算子 - 练习题

这边会给大家一些练习题, 以及参考解答, 过程可能会与大家有些不尽相同, 还请各位多多包涵, 我会先...

予焦啦!问题分析

本节是以 Golang 上游 8854368cb076ea9a2b71c8b3c8f675a8e1...

Day 10 ( 中级 ) 超时空跑马灯 ( 广播 )

超时空跑马灯 ( 广播 ) 教学原文参考:超时空跑马灯 ( 广播 ) 这篇文章会介绍如何使用「发送数...

Day 22 : 模型优化 - 知识蒸馏 Knowledge Distillation

什麽是知识蒸馏 Knowledge Distillation 知识蒸馏 Knowledge Dist...

[Day 25] 专案执行(上)

专案是组织进行的一个暂时性(有明确的开始与结束时间)的努力付出,在一段事先确认的时间内,运用事先决定...