Android没有运行整个功能?

时间:2013-06-21 13:34:49

标签: android java-native-interface

我不知道如何更好地构建这个问题。我正在使用JNI进行一些图像处理。我有三个JNI调用,一个用于初始化,一个用于图像处理(因此这个被多次调用),一个用于调用所有的销毁/关闭方法。

现在我的问题是我以某种方式调用图像处理调用AFTER destroy。我按下后退按钮叫破坏。我正在使用相机预览,所以我在onSurfaceDestroyed中调用了这个destroy方法。我把print语句调试。这些是相关的代码片段 -

public void destroy()
{
    destroyTorch(torchState);
    torchState = 0;
    Log.d("ADebugTag", "torchstate in destroy = " + Long.toString(torchState));             
}

这是上面调用的本机函数 -

JNIEXPORT void JNICALL Java_com_example_torchandroid_CameraClass_destroyTorch(JNIEnv *env, jobject thiz,jlong  torchStateLocation)
{
__android_log_print(ANDROID_LOG_INFO, "Torchandroid", "Closing lua state");
   lua_State *L = (lua_State*) torchStateLocation;
   lua_close(L); //Close lua state.
}

这是执行图像处理的本机调用。调用上述内容后,以下内容不起作用。

start = SystemClock.elapsedRealtime();
bProcessing = true;
if(torchState != 0)
{
    Log.d("ADebugTag", "Calling torch");
    Log.d("ADebugTag", "torchstate = " + Long.toString(torchState));                
    callTorch(torchState, PreviewSizeWidth, PreviewSizeHeight, FrameData, pixels); 
}
bitmap.setPixels(pixels, 0, PreviewSizeWidth, 0, 0, PreviewSizeWidth, PreviewSizeHeight);

destroy方法调用native,它基本上会破坏任何打开的状态。该本机调用中有一个print语句,表明调用成功。现在这是打印语句的顺序 -

Closing lua state  //This is a print in native destroyTorch
Calling torch
torchstate = 462345328923482082342 //The pointer that was supposed to be set to 0

现在输出“关闭lua状态”这一事实意味着应该执行以下行,即将torchState设置为0。但事实并非如此。我不知道为什么会发生这种情况,但这会导致堆栈问题(显然),因为torchstate不存在但会在图像处理调用中使用。

更重要的是,“毁灭中的火炬”系列永远不会打印,这让我相信部件在崩溃后由于内存泄漏而执行。这是因为它是在不同的线程?这是为什么?有没有办法让它们在同一个线程中运行?毕竟,它们不应该并行运行。

0 个答案:

没有答案