我为Unity应用程序创建了一个Jar插件。 Jar插件使用我的Android平板电脑上的前置摄像头和OpenCV来执行一些图像处理。我发现如果我遮住了相机,大约4秒钟后,整个Unity应用程序就会崩溃。
插件中的Java代码调用以下方法将预览回调附加到相机...
mCamera.setPreviewCallbackWithBuffer(new Camera.PreviewCallback() {
private long timestamp = 0;
public synchronized void onPreviewFrame(byte[] data, Camera camera) {
Log.w(LOG_TAG, "HAVE PREVIEW FRAME: Time Gap = " + (System.currentTimeMillis() - timestamp));
timestamp = System.currentTimeMillis();
try {
processCameraFrame(data, camera);
camera.addCallbackBuffer(data);
} catch (Exception e) {
Log.e(LOG_TAG, "addCallbackBuffer error");
return;
}
Log.w(LOG_TAG, "RETURNING FROM ON PREVIEW FRAME...");
}
});
然后预览回调会启动此AsyncTask
,以在后台调用自定义的“检测”功能...
protected DetectionUpdate doInBackground(byte[]... params) {
Log.w("Main", "detection task LIBRARY");
DetectionUpdate update = new DetectionUpdate();
update.setDetectStatus(update_status.U_CANNOT_LOCATE_SYMBOL.ordinal());
try {
Mat mat = convertByteArrayToMat(params[0]);
update = mStickerDetector.detect(mat, update, mStickerMeasurementHandler);
} catch(Exception e) {
Log.w("Main", "caught exception during detect: " + e.getMessage());
}
return update;
}
Android Studio中是否有某种方法可以弄清应用程序崩溃的原因(我logcat
控制台中看不到崩溃的任何引用,只是说过程已死)。异常处理代码无效。
我觉得问题可能与doInBackground
方法执行得太快有关,该方法在摄像机被遮盖并暴露出比赛条件时执行得太快。有没有人遇到类似的问题并且可以提出解决方案?
我正在使用Android 4.0.4。任何帮助,不胜感激!