在Android與Kotlin應用程式中使用coroutine實現非同步程式執行

何孟翰 Mark Ho

  • 精誠資訊/恆逸教育訓練中心-資深講師
  • 技術分類:Mobile行動應用開發

 

 

coroutine是一種可以用在Android開發上的並時程式的設計樣式. 它是從Kotlin 1.3開始加進來的,從許多不同的語言都可以發現類似的概念。除了Android程式之外,其它用Java/Kotlin語言開發的專案例如spring boot也可以利用到coroutine。

首先,對於新的Android專案,Kotlin的版本都是夠新的,以Android Studio 3.6所產生的專案為例,Kotlin的版本是1.3.61,要檢查目前Kotlin的版本可以在專案階層的build.gradle中檢視:

而為了簡單起見,要檢視Kotlon中coroutine的用法可以直接開intelliJ的kotlin專案, 但是由於kotlin的coroutine是在語言之外透過library達成的,所以可以選取Gradle與Kotlin/JVM的專案結構。

之後打開build.gradle,加上coroutine的library相依性,並且在repository中加上jcenter。

初次建置時會稍微花一些時間,此時就可以來撰寫第一段程式了,在一個main函數中加上以下的程式。

此處可以看到在GlobalScope.launch,會啟動一個平行的呼叫,在停止了一秒鐘之後就印出了Hello coroutine的字樣。

因此一個運行的結果會是:

由於這種非同步的特性,所以在一些網路呼叫、檔案存取、壓縮解壓縮、影像運算處理上,可以做到不阻斷主要執行緒但是程式依然能夠執行的特性,例如要平行的做五個coroutine 就直接在迴圈中呼叫launch即可。

如此得到的結果是:

由此處可以看到五個launch的coroutine分別依照自己的時間去印出結果,而不會歹相阻擋彼此的呼叫。