2017-09-11 13 views
0

私はcamera2 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

まず、Androidフレームワークに属していない、TimerTimerTaskjava.utilの一部であることが明らかにされるべきです。 1.
タイマーとTimerTaskをを

TimerTask働いているどのようにあなたの定義されたタスクを実行するrunメソッドをオーバーライドするRunnableを実装するユーティリティクラスです。その間、Timerは、時間をスケジュールしてそのタスクを実行するのに役立ちます。また、タスクはバックグラウンドスレッドで実行されます。前述したように上記のクラスが互いに
と組み合わせる方法
2、TimerTaskはあなたの実際のタスクを定義し、Timerは、それを実行するためのアラームを設定します。
3.さらにこのメソッドの主な役割は何ですか?
stopRecordingVideo()に電話すると、タイマーはMediaRecorderバックグラウンドスレッドで30ミリ秒後にオフにするためにここで使用されます。私が思ったように、ここでTimerを使用する主な目的は、MediaRecorder.stop()をUIスレッドではなくバックグラウンドスレッドで実行することです。

+0

30ミリ秒後にSTOPボタンを押すと、メディアレコーダーがオフになります。つまり、停止ビデオ処理を開始するには30ミリ秒かかるでしょう。私は正しい? –

+0

はい。スケジュールされた時間(ここでは30ミリ秒)後に、TimerTask 'run'メソッド内のすべてを呼び出します。あなたはそれを2000または3000に変更してテストすることができます。 –

+0

ありがとう@クワン。あなたは私の一日を節約します... –

関連する問題