当线程退出时,为什么我的Android应用程序会崩溃?

时间:2016-02-25 16:40:50

标签: android c++ multithreading stl android-ndk

当线程退出时,为什么我的Android应用会崩溃?

logcat中,当我的应用崩溃时,我会看到以下输出。

D/dalvikvm: threadid=13: thread exiting, not yet detached (count=0)
D/dalvikvm: threadid=13: thread exiting, not yet detached (count=1)
E/dalvikvm: threadid=13: native thread exited without detaching
E/dalvikvm: VM aborting

我不确定是什么线程导致这个。该应用程序使用带有几个STL线程实例(std::thread)的C ++库。以下是我如何使用库中的线程的示例:

std::thread thread([context] () { ... });
thread.detach();

该库在iOS,OS X和Linux上没有任何此类错误。我的猜测是错误不是因为缺少对std::thread::detach的调用。

不确定是否相关:

  • 我使用gnustl_static
  • 该库是通过NDK集成的,但低级代码与平台无关,因此我不会调用JavaVM::AttachCurrentThreadJavaVM::DetachCurrentThread

我不知道该做什么或寻找什么。

1 个答案:

答案 0 :(得分:4)

嗯,某事正在调用AttachCurrentThread。如果没有,VM将不知道线程是否退出。

任何进行JNI调用的线程都必须首先附加到VM。一旦连接,它必须在退出之前分离以避免资源泄漏。

This post提供了有关此情况的更多信息,this post还有一些其他详细信息。