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

时间:2014-10-02 12:45:20

标签: android java-native-interface

我正在使用为android编译的ffmpeg并且现在可以接受,但是有时会出现错误(基于一些Android手机配置)并且应用程序只是强制关闭此消息:

  

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

ffmpeg调用在try / catch中;但是,它似乎并不关心。

那么,我该如何阻止此强制关闭并向用户显示一条消息?

2 个答案:

答案 0 :(得分:1)

I'm afraid I can't do that.另见hints at why这个答案。

当ffmpeg死亡时,整个程序都需要它。事情就是这样。使用Java编程时,您不必考虑以这种方式崩溃的程序,但是当写入i C的ffmpeg消失时,它可以取消整个Java程序。

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

答案 1 :(得分:0)

您可以不将ffmpeg作为库运行,而是作为单独的可执行进程运行。这可能效率显着降低,但在这样的设置中,您的过程可能会在ffmpeg崩溃后继续存在。

您还可以设置您的应用,使其具有在不同进程中运行的活动和服务,例如, How to create an Android Activity and Service that use separate processes

这允许一些看门狗机制,等等。如果没有仔细测试,我不知道这种方式是否可以提供比运行ffmpeg可执行文件更好的性能,或者更糟。