Kotlin Coroutines協程入門

Kotlin協程 和 協程 是兩個東東,這裏只說Kotlin協程;

Kotlin協程是一個線程框架;

需要額外引入:

    implementation "org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0"
直接上代碼,簡單實現:
// 默認在後臺執行,可指定線程
GlobalScope.launch {
    LogUtil.i("zz------${Thread.currentThread().name}")
}
// zz------DefaultDispatcher-worker-2 (後臺線程)

線程切換,掛起函數走一波:

suspend掛起函數

    // 設置主線程線程環境
    GlobalScope.launch(Dispatchers.Main) {
        // suspend,掛起函數,方法內切線程
        ioFun1()
        // 自動回到協程主線程,上面指定主線程
        uiFun1()
    }
    /*
    zz------ioFun1--DefaultDispatcher-worker-3
    zz------uiFun1--main
    */

/*
 suspend 修飾的方法稱之爲掛起函數,有標記和提醒作用
   掛起函數只能在協程或者另外一個掛起函數中使用,在協程中掛起函數結束後自動切回“協程主線程”
 */
private suspend fun ioFun1() {
    // 切換線程
    withContext(Dispatchers.IO) {
        LogUtil.i("zz------ioFun1--${Thread.currentThread().name}")
    }
}

private fun uiFun1() {
    LogUtil.i("zz------uiFun1--${Thread.currentThread().name}")
}

如果協程執行耗時操作未完成,頁面關閉如何操作?

        val launch = GlobalScope.launch {
            // 耗時任務
            getData()
        }

        // 取消協程
        launch.cancel()

如果有多個協程如何操作?

KTX(Kotlin Extensions)擴展:引入KTX

    implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0'
    implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0'

可在mvvm中使用:

        // 在onDestroy方法中自動取消,不用手動取消
        lifecycleScope.launch {
            // 耗時任務
            delay(1000)
        }

持續更新中。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章