java JNI和取消异步任务
我有一个AsyncTask,在doInBackground()中我调用C函数,该函数执行一段时间。当我通过调用cancel(true)取消异步任务时,它返回true——就像任务被终止一样,但在“终止”之后我仍然可以看到C代码中的日志语句
对我来说,C函数似乎并没有真正终止
我的问题是-如何正确终止C函数的执行
你可以在下面搜索框中键入要查询的问题!
我有一个AsyncTask,在doInBackground()中我调用C函数,该函数执行一段时间。当我通过调用cancel(true)取消异步任务时,它返回true——就像任务被终止一样,但在“终止”之后我仍然可以看到C代码中的日志语句
对我来说,C函数似乎并没有真正终止
我的问题是-如何正确终止C函数的执行
# 1 楼答案
当AsyncTask终止时,运行C函数的线程被中断。您需要注意长时间运行的C代码中的中断状态(检查isInterrupted?)然后手动退出
编辑:
查看xuggle(ffmpeg JNI包装器),尤其是
csrc/com/xuggle/ferry/JNIHelper.cpp
以获得完整且实现良好的解决方案# 2 楼答案
找到了答案here
以下是C版本: