我尝试使用SurfaceView
打开相机和显示器。这延迟了活动的加载很长一段时间。所以我想知道打开相机的最佳做法是什么。
答案 0 :(得分:4)
来自http://developer.android.com/training/camera/cameradirect.html:
获取Camera对象的实例是第一步 直接控制相机的过程。作为Android自己的相机 应用程序确实,建议访问相机的方法是打开 摄像头位于从onCreate()启动的单独线程上。这个 方法是一个好主意,因为它可能需要一段时间,可能会陷入困境 UI线程。在更基本的实现中,打开相机可以 被延迟到onResume()方法以方便代码重用和保持 控制流程简单。
所以官方建议使用单独的线程。这意味着修改活动以便能够处理相机尚未打开的状态,甚至可能无法完全打开。
如果您对多线程和Android应用程序开发不满意,最好让Activity停止运行。在大多数设备上,相机打开得非常快。
答案 1 :(得分:1)
虽然很难让相机启动得更快,但您可以通过Activity
或其他方法将camera.open()
卸载到后台线程,从而加快AsyncTask
启动速度。您也可以在camera.open()
之后将onResume()
来电延迟一段任意的毫秒数,以便在相机加载发生之前Activity
已经可见。
我不建议使用AsyncTask方法 - 使相机加载异步操作非常容易出错。
后一种方法也没用,因为相机在加载之后才能使用。