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也會簡單很多
訂閱Codeilin的旅程,若有最新消息會通知。
廣告
發表迴響