我有一个Android应用程序,它使用surfaceview来显示相机预览。
但是,图像不稳定,此警告出现在logcat:
中Skipped 61 frames! The application may be doing too much work on its main thread
我很乐意在这里分享我的代码,但代码由三个类组成,一个是CameraActivity,一个是CameraPreview类(扩展了SurfaceView),另一个是位于CameraPreview顶部的自定义视图。
这看起来好像很多代码只是在一个stackoverflow问题中,并且由于我不知道该寻找什么原因,我不知道如何缩小它。
我很乐意用相关的代码片段来编辑这个问题,如果这会有所帮助,或者如果有人对这可能发生的原因有什么想法,我很满意。
答案 0 :(得分:2)
如果一次又一次出现 Skipped XX frames
警告,您可能在主线程上做了太多。为了使应用程序保持响应,规则1是将所有处理从主线程移开。对于所有与相机相关的工作,最好的方法是 use a secondary HandlerThread 。
如果您的应用中使用预览回调,请确保使用 setPreviewCallbackWithBuffer() ,否则垃圾收集器甚至可能会带来一个功能强大的设备进行抓取。如果您的 onPreviewFrame() 方法可能需要一段时间,请考虑使用ThreadPool执行程序来实际处理您的框架。