У меня есть активность, которая использует полный экран SurfaceHolder
, открывая камеру для предварительного просмотра (на основе кода zxing
).AsyncTask Open Camera
Запуск этого действия медленный (1,1 секунды), я думаю, из-за тяжелого подъема диспетчера камеры. Я использую метод 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);
}
}
}
Этот код не содержит ошибок, но рендеринг макета все еще ждут открытия камеры. Я вызываю метод выполнения AsyncTask
в onResume
, это правильное местоположение?
У камеры уже есть разрешение на AndroidManifest? – bofredo
Пожалуйста, разместите код в методе onResume(), а также любые связанные с ним методы, такие как initCamera() – user1132959
Чтобы узнать, что он ждет, вы должны размещать сообщения журнала повсюду. Это позволит вам увидеть, где задержка, и оттуда вы можете узнать, почему. – user1132959