当前位置:   article > 正文

未捕获的异常导致crash_c#抓不到异常,导致程序异常退出

c#抓不到异常,导致程序异常退出

       通常我们在可以预见的可能出现异常的手动调用try catch来捕获代码片中的异常,防止app直接崩溃,或者即使没有try catch,通常崩溃以后,日志里会打出具体的异常信息,并提示具体在哪一个类,哪一行出现错

       但博主之前遇到的问题就不在此类范围之内,app直接崩溃,并且没有明显的异常信息,且看error信息

       提示Channel is unrecoverably broken and will be disposed!,上stackoverflow上搜索关键词,找不到答案,当然不能死心,在反复的crash后(在不知道原因的时候简直迷之bug,同样的操作,有时候这样的日志,有时候那样的日志),终于找到了有用的信息


       切换到Verbose级别的日志,看到了thread exiting with uncaught exception,翻译过来就是线程未捕获到的异常,正好对应了每次crash以后,进程就挂了,那么为什么是未捕获到的异常,我非要去捕获他!知道是什么异常才知道怎么去解决

       一番搜索过后,找到了出现此类问题以后,极有可能是“线程池中,线程池在执行任务时捕获了所有异常,这样一来线程中所有的异常都无法捕获到抛出的异常”。

很庆幸,android给我们提供了去捕获这类异常的接口,如下图


        我这是让BaseActivity去实现了UncaughtExceptionHandler这个接口,并重写uncaughtException这个方法,最后在oncreat去调用如上的所示的方法,这样就可以捕获到异常了。

那么重新让程序crash以后,打印出了以下日志



Only the original thread that created a view hierarchy can touch its views


       意思是我在子线程去更新了UI,众所周知更新UI的操作要放在主线程去执行,知道异常以后,结合在什么地方崩溃,就可以极大的缩小问题出现的可能范围


PS:最后是我之前代码里的迷之操作,在子线程里里写了adapter.notifyDataSetChanged()这个方法,会让adapter去刷新view(拍胸脯保证,我都不知道当时为啥加了这句 )

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/245398
推荐阅读
相关标签
  

闽ICP备14008679号