Kotlin Coroutine Scope Exception處裡方法

1. 範例程式碼

GitHub:

https://github.com/f40706/coroutine_scope_exception

2. Exception擷取方法

package com.john.coroutine_scope_exception.common.sdk

import kotlinx.coroutines.*
import kotlin.coroutines.CoroutineContext

class CoroutineScopeSDK {
    fun coroutineScopeLaunch(
        block: suspend CoroutineScope.() -> Unit,
        errorCallback: (Throwable) -> Unit
    ) = coroutineScopeLaunch(Dispatchers.Main, block, errorCallback)

    fun coroutineScopeLaunch(
        context: CoroutineContext,
        block: suspend CoroutineScope.() -> Unit,
        errorCallback: (Throwable) -> Unit
    ): Job {
        val handler = CoroutineExceptionHandler { _, exception ->
            errorCallback(exception)
        }
        return CoroutineScope(context).launch(handler) {
            block()
        }
    }
}

3. 使用方式

private fun simulationCoroutineScope() {
    mJob = mCoroutineScopeSDK.coroutineScopeLaunch({
        //testFun1()
        testFun2()
    }, {
        when(it) {
            is IOException -> {
                println("IOException $it")
            }
            is Exception -> {
                println("Exception $it")
            }
        }
    })
}
private suspend fun testFun1() {
    withContext(Dispatchers.IO) {
        throw Exception("error1")
    }
}
private suspend fun testFun2() {
    withContext(Dispatchers.IO) {
        throw IOException("error2")
    }
}

當異常拋出時,並不會導致手機閃退,而可以監聽到拋出的異常

並停止當前的Coroutine Scope

對於程式的乾淨程度也很高

Debug也會簡單很多


Kotlin

正在載入…

執行時發生錯誤。請重新整理頁面後再試一次。


訂閱Codeilin的旅程,若有最新消息會通知。

廣告

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com 標誌

您的留言將使用 WordPress.com 帳號。 登出 /  變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 /  變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 /  變更 )

連結到 %s

WordPress.com.

向上 ↑

%d 位部落客按了讚: