| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> 重拾线程——子线程异常,为什么 App 会崩溃(3) -> 正文阅读 |
|
[移动开发]重拾线程——子线程异常,为什么 App 会崩溃(3) |
作者:recommend-item-box type_blog clearfix |
前言在 JDK 中,若子线程发生异常崩溃,并不会阻碍主线程的运行。
运行结果:
但是,在 Android 中,假如是子线程异常崩溃了,会导致整个 App 的退出。
运行结果:
这…这是为什么??? JDK DefaultUncaughtExceptionHandler通过这篇文章《线程异常处理》我们可以了解到,对于没有捕获到的线程异常,最后会由
Debug 看下:
居然是空值,难怪在 JDK 中,子线程的崩溃不会影响主线程,因为 DefaultUncaughtExceptionHandler 没有进行额外处理。 那我们来看看 Android 的 DefaultUncaughtExceptionHandler。 Android DefaultUncaughtExceptionHandlerem…果然是有实现类的,是 RuntimeInit 里面的 KillApplicationHandler 类。 这里我简单贴下 KillApplicationHandler 的 uncaughtException 方法的源码:
相信不用我过多解释,原因就是在 finally 的代码块执行中:
妥妥地杀进程。难怪在 Android 中,只要子线程异常崩溃,也会导致 App 的退出。 但是,为什么要这样做? 注释是这样写的: Handle application death from an uncaught exception. The framework catches these for the main threads, so this should only matter for threads created by applications. Before this method runs, the given instance of RuntimeInit.LoggingHandler should already have logged details (and if not it is run first). 只是说,是为了避免主线程出现异常时,进行的处理。 假如仅是主线程出现异常,就这样处理,确实可以理解,毕竟主线程都挂掉了,进行日志记录和杀进程是较好的方式,但是为什么在这里没有进行主线程的判断?这样就会导致即使是子线程出现异常也会导致整个 App 的崩溃。 知道答案的大佬们麻烦告知下。 |
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 0:03:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |