@Composable
fun ExampleException1() {
var errorState by remember { mutableStateOf(false)}
if (errorState) {
throw IllegalArgumentException("Argument error!")
}
Button(onClick = {
errorState = true
}) {
Text(text = "Button1")
}
}
@Composable
fun ExampleException2() {
Button(onClick = {
throw IllegalArgumentException("Argument error!")
}) {
Text(text = "Button2")
}
}
在小米8手机上面在点击Button1 和 Button2 在Android Studio的Logcat上都没有显示崩溃日志,用其他的手机在Logcat就有显示崩溃日志。(小米10 有崩溃日志打印),这就会导致在小米8手机上很难定位到崩溃的问题。
看log发现,以上两个崩溃日志在compose里面都用到了kotlin的协程,我就想协程里面引起的崩溃也会不会有这个情况。
然后我又写了个例子在协程里面抛出异常看看:
fun doSomeThing(){
viewModelScope.launch {
throwAnyException()
}
}
fun doSomeThing1(){
viewModelScope.launch {
coroutineScope {
withContext(Dispatchers.IO){
throwAnyException()
}
}
}
}
fun throwAnyException(){
throw IllegalArgumentException("Coroutine error!")
}
结果发现用小米8手机, 在Logcat上果然没有显示崩溃日志;终于破案了。
这个是我小米8手机的 型号和版本号。不知道大家的小米手机也是不是这样的,或者通过什么方法设置它可以在Logcat显示崩溃日志。还是小米做的什么负优化,导致看不到协程里面的崩溃日志。