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
}
}