关于这个bug也是排查了两个钟头,咋一看以为是相机授权引起的,其实不然。下面就需要注意的地方列举一下,以及如何排查该异常。
相机在打开,释放过程中的非正常操作都会引起该异常。
1、相机需要在 SurfaceTexture可用的时候去打开,即在TextureView 的SurfaceTextureListener监听回调中通过CameraManager打开相机;
一般情况下打开相机,释放相机资源都是一个耗时操作,会置于子线程中,如果过早openCamera,TextureView 还没有准备就绪;
2、相机资源释放对应的需要在TextureView 被销毁的时候释放,即位于onSurfaceTextureDestroyed( )中; 当然也可以手动释放,需要注意第三点;
3、释放的时候需要置TextureView 的SurfaceTextureListener为NULL;
因为TextureView.SurfaceTextureListener - surface在Activity或Fragment变为用户不可见的时候仍然可用,即surface处于活动状态,需要释放TextureView 的监听。