iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 8
1

Coroutines

Coroutines是輕量級的線程,去除了Callback的寫法讓非同步可以像同步程式一樣。
耗時的工作不應該放在主線程,因為只要主線程被卡住會導致ANR,這時就需要非同步來處理這塊耗時操作。

CoroutineScope(context: CoroutineContext).launch:執行Coroutines作用的scope。
withContext(context: CoroutineContext):scope中切換thread。
Dispatchers:Coroutines調用的位置
1.Dispatchers.Main:Android需要操作到UI thread時使用。
2.Dispatchers.Default:會開另一個thread,處理耗時處理使用。
3.Dispatchers.IO:跟Default的區別在於,它開的thread數量會比較多,處理耗時處理使用。
4.Dispatchers.Unconfined:跑在執行該Coroutines的thread上,suspend後被回復可能會跑到另一個thread上。

導入Android用的Coroutines

dependencies {
    implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.3.9'
} 

讀取網路增加權限(AndroidManifest.xml)

<uses-permission android:name="android.permission.INTERNET"/>

IO讀取網路,把thread切回Main處理UI數據的顯示

CoroutineScope(Dispatchers.IO).launch {
     val json = URL("https://gank.io/api/v2/data/category/Girl/type/Girl/page/1/count/10")
           .readText()

     withContext(Dispatchers.Main) {
         data.text = json
     }
}


上一篇
{Day7} ViewModel
下一篇
{Day9} Room
系列文
Kotlin Android Jetpack 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言