【发布时间】:2013-07-24 00:21:45
【问题描述】:
我有一个使用全屏SurfaceHolder 的活动,打开相机进行预览(基于zxing 代码)。
开始这个活动结果很慢(1.x 秒),我认为是因为相机管理器的繁重工作。我正在使用onResume 方法;将代码移动到AsyncTask 中是个好主意吗?
我想立即渲染布局,然后等待摄像头(我认为这是更好的用户体验)。我该如何处理?
活动
private class CameraTask extends AsyncTask<Void, Void, Void> {
SurfaceHolder.Callback callback;
public CameraTask(SurfaceHolder.Callback callback) {
this.callback = callback;
}
protected void doInBackground() {
cameraManager = new CameraManager(getApplication());
viewfinderView = (ViewFinderView) findViewById(R.id.viewfinder_view);
viewfinderView.setCameraManager(cameraManager);
SurfaceView surfaceView = (SurfaceView) findViewById(R.id.preview_view);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
if (hasSurface) {
initCamera(surfaceHolder);
} else {
surfaceHolder.addCallback(callback);
}
}
}
此代码没有错误,但布局渲染仍在等待相机打开。
我在onResume中调用AsyncTask的execute方法,位置正确吗?
【问题讨论】:
-
相机是否已经在 AndroidManifest 上获得了必要的权限?
-
请在您的 onResume() 方法以及 initCamera() 等任何相关方法中发布代码
-
要找出它在等待什么,您应该将日志消息放在任何地方。这将使您能够查看延迟的位置并从中找出原因。
-
Manifest 没问题,onResume 调用任务执行(仅此而已),initCamera 只需打开(方法)Camera。
-
在某些设备上打开相机可能会长时间保持 UI 线程。
标签: android performance android-layout android-asynctask android-camera