SurfaceHolder回调与Activity生命周期如何相关?
我一直在尝试实现需要在表面上预览相机的应用程序。正如我所看到的,活动和表面生命周期都包含以下状态: 首次启动活动时: onResume()->onSurfaceCreated()->onSurfaceChanged() 当我离开活动时: onPause()->onSurfaceDestroyed() 在此方案中,我可以做相应的像在开/释放摄像头和启动/停止预览电话onPause/onResume和onSurfaceCreated()/onSurfaceDestroyed()。 除非我锁定屏幕,否则它工作正常。当我启动该应用程序时,然后锁定屏幕并稍后解锁,我看到: onPause()-屏幕锁定后没有其他内容-然后是onResume()解锁后-之后没有任何表面回调。实际上,onResume()是在按下电源按钮并打开屏幕后调用的,但是锁定屏幕仍处于活动状态,因此,在活动可见之前就已经调用了。 使用此方案,解锁后会出现黑屏,并且不会调用任何表面回调。 这是一个代码片段,它不涉及相机的实际工作,而是SurfaceHolder回调。即使在我的手机上使用此代码,也会出现上述问题(按“返回”按钮时会以正常顺序调用回调,但锁定屏幕时会丢失回调): class Preview extends SurfaceView implements SurfaceHolder.Callback { private static final String tag= "Preview"; public Preview(Context context) { super(context); Log.d(tag, "Preview()"); SurfaceHolder holder = getHolder(); holder.addCallback(this); holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } public void surfaceCreated(SurfaceHolder holder) { Log.d(tag, "surfaceCreated"); } public void surfaceDestroyed(SurfaceHolder holder) { …