2017-09-11 2 views
0

카메라 2 API를 사용하여 앱을 제작하고 있습니다. 이제 Google samples in github을 참조하고 있습니다. 문제는 현재 녹화 비디오를 중지 할 때 TimerTimerTask 클래스가 사용 된 이유를 이해할 수 없다는 것입니다. 희망은 여기에 도움이됩니다. 고맙습니다. 여기 강령안드로이드의 타이머 및 타이머 - 추가 이해

는 :

private void stopRecordingVideo() { 
    // UI 
    mIsRecordingVideo = false; 
    mButtonVideo.setText(R.string.record); 
    // Stop recording 
    try { 
     mPreviewSession.stopRepeating(); 
     mPreviewSession.abortCaptures(); 
    } catch (CameraAccessException e) { 
     e.printStackTrace(); 
    } 

    Timer timer = new Timer(); 
    TimerTask timerTask = new TimerTask() { 
     @Override 
     public void run() { 
      mMediaRecorder.stop(); 
      mMediaRecorder.reset(); 
     } 
    }; 
    timer.schedule(timerTask,30); 

    startPreview(); 
} 

난 그냥
1. 어떻게 TimerTimeTask 위의 클래스가 서로
3와 결합하는 방법
2. 작동하는지 알고 싶어요. 또한이 방법의 주요 역할은 무엇입니까?

+0

파일을 연결할 수 있습니까? TimerTask 클래스를 당신이 링크 한 저장소에서 찾을 수없는 것 같습니다. –

+0

@HristoStoyanov 저장소에 링크를 연결합니다. 하지만 이제 클래스 파일 링크로 변경했습니다. 이제 전체 컨텍스트를 볼 수 있습니다. –

+0

여전히 TimerTask가 없으며 stopRecordingVideo() 메서드가 링크에서 매우 다릅니다. –

답변

1

첫째,이 TimerTimerTaskjava.util의 일부임을 분명히해야한다, 안드로이드 프레임 워크에 속해 있지. 1.
타이머와 TimerTask를가

TimerTask 작동되는 방법은 정의 된 작업을 수행 할 수 run 메소드를 오버라이드 (override) 할 Runnable를 구현하는 유틸리티 클래스입니다. 한편 Timer은 시간을 예약하고 해당 작업을 실행하는 데 도움이됩니다. 게다가, 당신의 작업은 백그라운드 스레드에서 수행됩니다. 전술 한 바와 같이 위의 클래스가 서로
과 결합하는 방법
2. TimerTask는 실제 작업을 정의하고 Timer 그것을 실행하기 위해 알람을 설정합니다.
3.이 방법의 주요 역할은 무엇입니까?
당신이 stopRecordingVideo() 전화
는, 타이머는 30 밀리 초 후에 백그라운드 스레드MediaRecorder을 해제 여기에 사용됩니다. 내가 생각하기에, 여기 Timer을 사용하는 주 목적은 MediaRecorder.stop()을 UI 스레드가 아닌 백그라운드 threa로 실행하는 것입니다.

+0

30 밀리 초 동안 STOP 버튼을 누르면 미디어 레코더가 꺼집니다. 정지 영상 처리를 시작하려면 30 밀리 초가 걸릴 것입니다. 내가 맞습니까? –

+0

예. TimerTask'run' 메서드는 예약 된 시간 (여기서는 30 밀리 초) 후에 모든 것을 호출합니다. 2000 또는 3000으로 변경하여 테스트하면 더 지연 될 수 있습니다. –

+0

@ Quang 감사합니다. 내 하루를 절약 할 수 있습니다 ... –