Kotlin全局捕捉協程異常方法詳解
單個異常捕捉
val handler = CoroutineExceptionHandler { coroutineContext, throwable -> Log.d(TAG, "onCreate: handler${throwable}") } Log.d(TAG, "onCreate:1") findViewById<Button>(R.id.button).also { it.setOnClickListener { GlobalScope.launch(handler) { Log.d(TAG, "onCreate: onClick") "anc".substring(10) } } }
launch裡面如果不寫handler
可以使用這樣的方式來創建全局異常捕獲處理
在main目錄下
新建 resources\META-INF\services\kotlinx.coroutines.CoroutineExceptionHandler
註意沒有後綴哦
然後回到java類裡面 隨便找個位置創建class類
內容
package com.example.coroutine import android.util.Log import kotlinx.coroutines.CoroutineExceptionHandler import kotlin.coroutines.CoroutineContext class GlobalCoroutineExceptionHandler : CoroutineExceptionHandler { override val key = CoroutineExceptionHandler private val TAG = "GlobalCortineExceptionH" override fun handleException(context: CoroutineContext, exception: Throwable) { Log.d(TAG, "handleException:${exception} ") } }
根據包名和類目
package com.example.coroutine.
GlobalCoroutineExceptionHandler
我們可以確定這個文件的路徑為
com.example.coroutine.GlobalCoroutineExceptionHandler
寫到剛才創建的沒有後綴的文件當中去
程序裡刪除 hander
findViewById<Button>(R.id.button).also { it.setOnClickListener { GlobalScope.launch { Log.d(TAG, "onCreate: onClick") "anc".substring(10) } } }
點擊按鈕後程序會閃退
但是
異常可以拿到。這就很好瞭
到此這篇關於Kotlin全局捕捉協程異常方法詳解的文章就介紹到這瞭,更多相關Kotlin協程異常內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Kotlin創建一個好用的協程作用域
- kotlin源碼結構層次詳解
- Kotlin coroutineContext源碼層深入分析
- Kotlin Job啟動流程源碼層深入分析
- Kotlin協程到底是如何切換線程的