Qt for Android应用关闭时触发libc SIGABRT 6错误求助
问题排查与修复方案
你遇到的是Android 10平台下Qt应用关闭时,hwuiTask1线程触发SIGABRT信号的崩溃问题,可按以下步骤排查:
硬件渲染资源释放问题排查
Qt for Android在Android 10的HWUI硬件渲染逻辑存在已知的资源释放时序问题,可先在应用初始化阶段添加如下代码强制关闭硬件加速测试:
// 放在QApplication初始化之前 QCoreApplication::setAttribute(Qt::AA_DisableAndroidHardwareAcceleration);
如果添加后崩溃不再复现,即可确认是硬件渲染释放时序问题,可保留该配置,或升级Qt版本获取官方修复。
JNI引用生命周期排查
检查所有Android平台独有JNI调用逻辑:关闭应用时是否存在已被JVM回收的Java对象仍被Native层调用的情况,尤其是自定义原生控件、系统服务调用相关的JNI接口,需要在应用退出前主动释放全局JNI引用,断开Native与Java层的调用关联。
版本缺陷修复
你提到的Qt 12.5.9应为笔误,Qt官方无12.x大版本,常见对应版本为Qt 5.12.9,该版本存在多个Android平台退出异常的已知bug,可升级到Qt 5.12.12 LTS最终补丁版,或Qt 6.2+ LTS版本,hwuiTask1退出崩溃问题在后续版本中已有官方修复。
退出流程时序优化
调整应用退出逻辑,不要直接调用quit()/exit()触发退出,先主动销毁所有顶级UI资源,延迟一段时间再触发进程退出,规避UI资源未完成释放就销毁进程的问题:
foreach (QWidget *w, QApplication::topLevelWidgets()) { w->deleteLater(); } // 延迟200ms等待资源释放完成再退出 QTimer::singleShot(200, qApp, &QApplication::quit);

内容的提问来源于stack exchange,提问作者Sangram Jadhav
相关产品推荐
相关产品推荐

