0
我有一项服务,可以打开前置摄像头并显示预览。 现在我想对预览图像进行一些图像处理,因此我设置了预览回调。摄像头在服务和预览帧
我的问题是没有调用回调,我得到臭名昭着的编舞消息“跳过X帧...太多的工作在其主线程” 这似乎很奇怪,因为我目前所做的回调打印日志行。此外,当我调试(通过ADT),并打破了日志打印行,它被称为(但不是如果我让它运行,然后尝试在线路上打破它)。 这种情况发生在我的平板电脑上运行时(我没有使用emultor),但是当我在手机上运行它时(Nexus 5比我的平板电脑更强大),每次都会成功调用回调,不会跳过任何帧。
我定制surfaceholder surfaceCreated():
public void surfaceCreated(SurfaceHolder holder) {
try {
mCamera.setPreviewDisplay(holder);
} catch (IOException e) {
Log.d(TAG, "Error setting camera preview: " + e.getMessage());
}
try {
mCamera.setPreviewCallback(new Camera.PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera arg1) {
Log.d("Freshub.BackgroundService", "onPreviewFrame Called!!");
}
});
} catch (Throwable e) {
e.printStackTrace();
}
mCamera.startPreview();
}
任何建议至于怎样得到它在我的平板电脑工作?
感谢您的回答,但那是非常错误的。一项服务不提供用户界面,但它确实可以容纳一个视图,因为我在布局上显示了一个相机预览,并且我的手机上的一切正常。 – Ysch
如果未显示视图,则系统不会让您从相机捕捉帧。顺便说一句,在活动环境之外持有视图肯定会导致内存泄漏;) –
显示视图,在我的手机上一切正常。从活动上下文中持有视图本身不会导致内存泄漏。它其实是一个很常见的做法。以Facebook Messenger为例(如下所示:[http://www.piwai.info/chatheads-basics/] – Ysch