Почему onResume (), кажется, вызывается дважды?

У меня есть свой класс деятельности здесь:

public class CameraActivity extends Activity {

private Camera mCamera;
private CameraPreview mPreview;

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //      startCamera();
}

public void startCamera() {
    setContentView(R.layout.camera_view);
    mCamera = getCameraInstance();// Open Camera
    mPreview = new CameraPreview(this,mCamera);// Goto Another Class

    FrameLayout preview = (FrameLayout) findViewById(R.id.camera_preview);
    preview.setLayoutParams(new FrameLayout.LayoutParams(400,400));

    //Declare Frame in which camera will be opened
    preview.addView(mPreview); // show this class into frame

}

protected void onResume() {
    super.onResume();
    Log.d("Print","resume()");
    startCamera();
}

public static Camera getCameraInstance() {
    Camera c = null;
    try {
        c = Camera.open(); // attempt to get a Camera instance
    } catch (Exception e) {
        Toast.makeText(null,"No camera on this device",Toast.LENGTH_LONG).show();
        // Camera is not available (in use or does not exist)
    }
    return c; // returns null if camera is unavailable
}

/*
protected void onPause() {
        if (mCamera!=null) {
            mCamera.release(); // release the camera for other applications
            mCamera = null;
        }
        super.onPause();
    }
*/
}

И класс Camera Preview здесь:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Camera mCamera;

@SuppressWarnings("deprecation")
public CameraPreview(Context context, Camera camera) {
    super(context);
    mCamera = camera;
    mHolder = getHolder();
    mHolder.addCallback(this);
    mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}

public void surfaceCreated(SurfaceHolder holder) {

    try {
        mCamera.setPreviewDisplay(holder);
        mCamera.startPreview();
    } catch (IOException e) {
        Log.d("Print","Error setting camera preview: "+e.getMessage());
    }

}
public void surfaceDestroyed(SurfaceHolder holder) {
    Log.d("Print","Destroyed()");
    mCamera.stopPreview();
    mCamera.release();
    // empty. Take care of releasing the Camera preview in your activity.
}

public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
    if (mHolder.getSurface()==null) {
        return;
    }
    try {
        mCamera.stopPreview();
    } catch (Exception e) {
        // ignore: tried to stop a non-existent preview
    }
    try {
        mCamera.setPreviewDisplay(mHolder);
        mCamera.startPreview();

    } catch (Exception e) {
        Log.d("Print","Error starting camera preview: "+e.getMessage());
    }
}

}

Однако когда я тестирую класс, onResume (), кажется, вызывается сначала, а затем снова через 1 или 2 секунды. Таким образом, камера должна обновить еще раз. Если я неФункция onResume () вообще не отображается, предварительный просмотр камеры стабилен, но затем происходит сбой, если я снова переключаюсь на приложение с домашнего экрана или другого приложения. Я'мы обнаружили, что onPause () не влияет ни на один из них. Мой код правильный? Что я должен добавить / удалить, чтобы он не обновлялся снова и не падал после переключения приложения?

Это выход LogCat из 1-го onResume () в другой:

    12-19 22:58:27.604: D/Print(28831): resume()
12-19 22:58:27.624: D/dalvikvm(29223): GC_CONCURRENT freed 195K, 8% free 3591K/3864K, paused 2ms+1ms, total 9ms
12-19 22:58:27.634: D/dalvikvm(29223): GC_FOR_ALLOC freed 245K, 10% free 3667K/4068K, paused 6ms, total 7ms
12-19 22:58:27.644: D/dalvikvm(29223): GC_FOR_ALLOC freed 241K, 11% free 3742K/4164K, paused 6ms, total 7ms
12-19 22:58:27.649: I/AwesomePlayer(13841): setDataSource_l(URL suppressed)
12-19 22:58:27.659: I/AwesomePlayer(13841): setDataSource_l(URL suppressed)
12-19 22:58:27.674: D/dalvikvm(29223): GC_CONCURRENT freed 255K, 8% free 3908K/4240K, paused 1ms+0ms, total 9ms
12-19 22:58:27.674: I/Camera2ClientBase(13841): Camera 0: Opened
12-19 22:58:27.674: D/ExynosCameraHAL2(13841): >>> I'm Samsung's CameraHAL_2(ID:0) < 12-19 22:58:27.674: D/ExynosCameraHAL2(13841): g_cam2_device : 0x00000000
12-19 22:58:27.674: D/ExynosCameraHAL2(13841): (ExynosCameraHWInterface2): ENTER
12-19 22:58:27.789: D/dalvikvm(29223): GC_CONCURRENT freed 210K, 6% free 4151K/4416K, paused 2ms+7ms, total 50ms
12-19 22:58:27.854: D/dalvikvm(29223): GC_CONCURRENT freed 281K, 8% free 4336K/4676K, paused 1ms+1ms, total 11ms
12-19 22:58:27.879: D/ExynosCameraHAL2(13841): (ExynosCameraHWInterface2): EXIT
12-19 22:58:27.904: D/gamook(29223): Loaded 66 configuration entries.
12-19 22:58:27.914: D/dalvikvm(29223): GC_CONCURRENT freed 399K, 10% free 4447K/4908K, paused 1ms+4ms, total 27ms
12-19 22:58:27.914: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 1ms
12-19 22:58:27.934: D/mali_winsys(28831): new_window_surface returns 0x3000
12-19 22:58:27.964: D/ExynosCameraHAL2(13841): (allocateStream): stream width(1920) height(1080) format(22)
12-19 22:58:27.969: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(0), num_buff(8), handle(b8683a48) 
12-19 22:58:27.974: D/ExynosCameraHAL2(13841): (allocateStream): stream width(2560) height(1920) format(21)
12-19 22:58:28.009: D/dalvikvm(29223): GC_CONCURRENT freed 279K, 8% free 4608K/4988K, paused 2ms+2ms, total 22ms
12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(4), num_buff(6), handle(b85aabd8) 
12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (allocateStream): stream width(2560) height(1920) format(ffffffff)
12-19 22:58:28.039: D/ExynosCameraHAL2(13841): (allocateStream): jpeg stream exists
12-19 22:58:28.039: D/ExynosCameraHAL2(13841): START stream thread 1 release 1869
12-19 22:58:28.049: D/ExynosCameraHAL2(13841): END   stream thread 1 release 1874
12-19 22:58:28.064: D/dalvikvm(29223): GC_CONCURRENT freed 320K, 8% free 4694K/5076K, paused 3ms+2ms, total 18ms
12-19 22:58:28.139: D/dalvikvm(29223): GC_CONCURRENT freed 452K, 10% free 4697K/5212K, paused 3ms+2ms, total 30ms
12-19 22:58:28.184: D/ExynosCameraHAL2(13841): (registerStreamBuffers): stream_id(5), num_buff(11), handle(b855dc30) 
12-19 22:58:28.199: D/dalvikvm(29223): GC_CONCURRENT freed 433K, 10% free 4775K/5268K, paused 2ms+2ms, total 29ms
12-19 22:58:28.199: D/ExynosCameraHAL2(13841): (allocateReprocessStreamFromStream): output_stream_id(5)
12-19 22:58:28.249: D/dalvikvm(29223): GC_CONCURRENT freed 513K, 11% free 4828K/5400K, paused 1ms+1ms, total 16ms
12-19 22:58:28.249: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 5ms
12-19 22:58:28.294: D/dalvikvm(29223): GC_CONCURRENT freed 528K, 11% free 4884K/5472K, paused 2ms+0ms, total 17ms
12-19 22:58:28.294: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 3ms
12-19 22:58:28.344: D/dalvikvm(29223): GC_CONCURRENT freed 601K, 12% free 4888K/5548K, paused 2ms+1ms, total 19ms
12-19 22:58:28.344: D/dalvikvm(29223): WAIT_FOR_CONCURRENT_GC blocked 7ms
12-19 22:58:28.389: D/dalvikvm(29223): GC_CONCURRENT freed 616K, 13% free 4857K/5548K, paused 0ms+1ms, total 17ms
12-19 22:58:28.399: D/ExynosCameraHAL2(13841): ### Applying AF Mode change(Mode 2) 
12-19 22:58:28.404: D/dalvikvm(29223): GC_FOR_ALLOC freed 17K, 13% free 4843K/5548K, paused 14ms, total 14ms
12-19 22:58:28.404: I/dalvikvm-heap(29223): Grow heap (frag case) to 4.823MB for 39033-byte allocation
12-19 22:58:28.419: D/dalvikvm(29223): GC_FOR_ALLOC freed 

Ответы на вопрос(2)

Ваш ответ на вопрос