Kotlin協程重要概念介紹


1. CoroutineScope

    可以理解為協程本身,包含了CoroutineContext。

2. CoroutineContext

    CoroutineContext叫做協程上下文,是一些元素的集合,主要包括Job和CoroutineDispatcher元素,可以代表-協程的場景。

3. EmptyCoroutineContext

    表示一個空的協程上下文。

4. CoroutineDispatcher

    CoroutineDispatcher是協程調度器,決定協程所在的線程或線程池。它可以指定協程運行於特定的一個線程、一個線程池或者不指定任何線程(這樣協程就會運行於當前線程)。

    在coroutines-core中CoroutineDispatcher有三種標准實現:Dispatchers.Default、Dispatchers.lO,Dispatchers.Main和Dispatchers.Unconfined(Unconfined就是不指定線程)

    launch函數定義如果不指定CoroutineDispatcher或者沒有其他的Continuationlnterceptor,默認的協程調度器就是Dispatchers.Default,Default是一個協程調度器,其指定的線程為共有的線程池,線程數量至少為2,最大與CPU數相同。

5. Job & Deferred

5.1 Job

    Job,任務,封裝了協程中需要執行的代碼邏輯。Job可以取消並且有簡單的生命周期,它有三種狀態:

    

image.png

 

    Job完成時是沒有返回值的,如果需要返回值的話,應該使用Deferred,它是Job的子類

5.2 Deferred

    Deferred有返回值,其他同Job。

6. Coroutine builders

    CoroutineScope.launch函數屬於協程構建器Coroutine builders,Kotlin中還有其他幾種Builders,負責創建協程。

  1. CoroutineScope.launch{}是最常用的Coroutine builders,不阻塞當前線程,在后台創建一個新協程,也可以指定協程調度器。

  2. runBlocking{}是創建一個新的協程同時阻塞當前線程,直到協程結束。這個不應該在協程中使用,主要是為main函數和測試設計的。

  3. withContext{}不會創建新的協程,在指定協程上運行掛起代碼塊,並掛起該協程直至代碼塊運行完成。

  4. async{},CoroutineScope.async可以實現與launch builder一樣的效果,在后台創建一個新協程,唯一的區別是它有返回值,因為CoroutineScope.async{}返回的是Deferred類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM