在测试Android Camera2 API的性能时,我注意到与ImageReader
相关的错误。
启动应用程序时正在调用onImageAvailable()
函数,但在锁定和解锁屏幕后,根本不会调用它。我的应用程序中涉及相机的部分基于Camera2Basic Google教程。
更重要的是,我已经安装了 Camera2Basic Android演示应用程序,该应用程序提供了Camera2 API,我发现即使是Google制作的这个应用程序也有同样的问题。
这个问题有什么解决方案吗?
在Android Studio中使用调试工具花了一些时间后我发现调用onImageAvailable()
函数的问题只发生在
TextureView
函数中提供了用于预览的onResume()
。
@Override
public void onResume() {
super.onResume();
startBackgroundThread();
// When the screen is turned off and turned back on, the SurfaceTexture is already
// available, and "onSurfaceTextureAvailable" will not be called. In that case, we can open
// a camera and start preview from here (otherwise, we wait until the surface is ready in
// the SurfaceTextureListener).
if (mTextureView.isAvailable()) {
openCamera(mTextureView.getWidth(), mTextureView.getHeight());
} else {
mTextureView.setSurfaceTextureListener(mSurfaceTextureListener);
}
}
如果mTextureView.isAvailable()
返回 false 并且SurfaceTextureListener
上设置了mTextureView
,那么onImageAvailable()
会被正确调用,但如果函数openCamera(mTextureView.getWidth(), mTextureView.getHeight())
是在onResume()
中调用问题发生。