C JNI 库导致整个 Android 应用程序崩溃

Ali*_*lin 5 java-native-interface android

我正在使用为 Android 编译的 ffmpeg,目前工作得相当可以接受,但有时会出现错误(基于某些 Android 手机配置),并且应用程序只是强制关闭并显示以下消息:

致命信号 11 (SIGSEGV) 位于 0x00000001(代码=1),线程 20745(AsyncTask #2)

ffmpeg 调用位于 try/catch 内;然而,它似乎并不在意。

那么,如何防止这种强制关闭并向用户显示一条消息?

Pro*_*ica 1

恐怕我做不到。另请参阅这个答案,其中暗示了原因

当 ffmpeg 死掉时,它会带走你的整个程序。事情就是这样。当用Java编程时,你不必考虑程序以这种方式崩溃,但是当用C编写的ffmpeg死机时,它可以让你的整个Java程序崩溃。

try/catch没有帮助,因为 ffmpeg 不知道也不关心 Java 异常。在 Java 程序中,唯一的解决方案是找到导致 ffmpeg 死亡的 bug,或者找到触发 bug 的原因并以不崩溃的方式调用 ffmpeg。正如 Alex Cohn 所指出的,另一种解决方案是在另一个进程中运行 ffmpeg,这样它就不能删除除自己的进程之外的任何其他内容。