NDK 创建的后台线程中的 SIGABRT

SIGABRT in NDK-created background thread

我有一些 Android 从 Xamarin 调用的 NDK 代码。 returns 直接简单的东西是可以的,但是当我创建一个后台线程时,我得到一个 SIGABRT (-6) 并且应用程序死了。

后台线程是用 std::thread(lambda) 创建的。需要一个后台 NDK 线程,因为此代码必须解压缩一个非常大的数据文件,然后 运行 一些 CPU 密集型算法使用解压缩的数据。

现在 SIGABRT 似乎源自 libc,据推测这是应用程序无响应的症状。然而这应该只影响主线程?在开发人员选项中,我确实启用了 "show all ANR" 选项,但它只会在库存 Android 软件周围闪烁几个红框。

为什么 Android 混淆了我的后台线程和前台线程?我如何告诉 Android 不要杀死我的后台线程?

Android v5.1.1 库存 Google/LG Nexus 5.

事实证明 SIGABRT 超载了。它是对应用程序未响应、对 abort() 的调用以及未处理的异常的反应而发生的。 logcat 输出不会告诉您发生了哪些情况。

我通过 dup'ing stderr 发现了这一点 - 解压后的数据与应用程序中的算法不匹配,因此在调用慢算法时立即发生异常。