1
我的應用程序包含三個片段。我需要保持流暢的用戶體驗,所以我使用setOffscreenPageLimit()方法將它們全部保留在內存中。在片段中使用相機預覽時性能下降
問題:當我開始一個新的活動(甚至是空的)時,它的加載速度很慢。當我完成它時也是如此。
我知道這是來自我的相機預覽片段,因爲當我註釋掉相機的init時,一切都運行得非常順利。
這是我如何初始化我的相機預覽上的onResume方法:
mCamera = GetCameraInstance(currentCameraId);
//-- Set the SurfaceView
preview = (SurfaceView) view.findViewById(R.id.camera_preview);
mSurfaceHolder = preview.getHolder();
mSurfaceHolder.addCallback(this);
if (mCamera != null) {
mCamera.setPreviewDisplay(mSurfaceHolder);
mCamera.startPreview();
}
當新的活動開始後,surfaceDestroyed方法被調用這破壞了攝像頭預覽。當新活動終止時,應用程序再次重新創建相機視圖。
@Override
public void surfaceDestroyed(SurfaceHolder surfaceHolder) {
if (mCamera != null) {
mCamera.stopPreview();
mCamera.release();
mCamera = null;
}
}
如看到的traceview()花在stopPreview的時間和釋放()方法。大約需要700毫秒才能銷燬相機預覽。
使用Traceview來確定你的時間花在哪裏。 – CommonsWare 2015-03-18 22:28:51
大約有700毫秒用於銷燬和釋放相機。 280毫秒重新創建相機預覽。 PS:我沒有足夠的代表發佈屏幕截圖... – daarthvader 2015-03-19 11:10:03
「我沒有足夠的代表發佈屏幕截圖」 - 歡迎您在其他位置上傳圖片並鏈接到這裏。 「約700ms花在銷燬和釋放相機上」 - 我還沒有試過將'stopPreview()'或'release()'移動到後臺線程中,但這對你的情況值得一試。 – CommonsWare 2015-03-19 11:31:53