2017-06-05 11 views
0

カウントダウンクロックのアニメーションがあるフラグメントがあります。私は、ユーザーからの介入なしにフラグメントがロードされるとすぐにアニメーションを開始したい。私は今onCreateViewで次のメソッドを呼び出しているかどうフラグメントロードの直後にアニメーションを開始する正しい方法

は:

private void startCountDownAnimation() 
{ 
    final int totalSeconds = secondsToStart + minutesToStart * 60; 
    mRingProgressBar.setTotalSeconds(totalSeconds); 
    HandlerThread handlerThread = new HandlerThread("countdown"); 
    handlerThread.start(); 

    Handler handler = new Handler(handlerThread.getLooper()); 
    handler.post(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      timer.scheduleAtFixedRate(new TimerTask() 
      { 
       //int secondsPassed = 0; 
       int secondsLeft = totalSeconds; 

       @Override 
       public void run() 
       { 
        if(secondsLeft == 0) 
        { 
         //fragment transaction 
         timer.cancel(); 
        } 
        //final int currentProgress = Math.round(((float) secondsPassed)/((float) totalSeconds)*100f); 
        getActivity().runOnUiThread(new Runnable() 
        { 
         @Override 
         public void run() 
         { 
          mRingProgressBar.setSeconds(secondsLeft); 
          secondsLeft--; 
          //secondsPassed++; 
         } 
        }); 
       } 
      }, 0, 1000); 

     } 
    }); 
} 

これは、アプリがバックグラウンドに行くときなど、動作しているようです。私はちょうど私がやっていることは、アニメーションを処理するための正しい方法であるかどうかを知りたい

1)onCreateこのメソッドを呼び出すための正しい場所ですか?

2)アプリのいくつかの問題を背景にすることができますか、しばらくして画面が黒くなることがありますか?

3)私は変更する必要がありますか?

答えて

0

タイマーはすでに非同期であるため、ハンドラー内でタイマーを使用しないでください。タイマーはメモリリークを発生させることが知られていますので、代わりにCountDownTimerを使用することをお勧めします。 あなたはおそらくonCreateでタイマーを作成し、onResumeでタイマーを開始し、onPauseでタイマーを停止するべきです。次に、onTickのビューを更新しますが、ビューが使用可能かどうかを確認する必要があります(view!= null)

関連する問題