【问题标题】:Why does my Android app crash when my threads exit?为什么我的线程退出时我的 Android 应用程序会崩溃?
【发布时间】:2016-02-25 16:40:50
【问题描述】:

为什么我的线程退出时我的 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 线程实例的 C++ 库 (std::thread)。以下是我如何使用库中的线程的示例:

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

该库在 iOS、OS X 和 Linux 上运行时不会出现任何此类错误。我的猜测是该错误不是因为缺少对 std::thread::detach 的调用。

不确定是否相关:

  • 我用gnustl_static
  • 该库是通过 NDK 集成的,但底层代码是平台无关的,所以我没有调用 JavaVM::AttachCurrentThreadJavaVM::DetachCurrentThread

我不确定该做什么或寻找什么。

【问题讨论】:

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


【解决方案1】:

嗯,某事正在打电话给AttachCurrentThread。如果没有,VM 不会知道线程是否退出。

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

This post 有更多有关情况的信息,this post 有一些额外的细节。

【讨论】:

  • 噢!你说的对。间接调用AttachCurrentThread 的较低级别线程之一。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-25
  • 1970-01-01
  • 2011-05-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多