2017-06-05 71 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

您不應該在處理程序中使用Timer,因爲Timer已經是異步的。定時器已知會產生內存泄漏,所以我建議使用CountDownTimer代替。 您應該在onCreate中創建計時器並在onResume中啓動它並在onPause中停止它。然後你更新onTick中的視圖,但你可能需要檢查視圖是否可用(view!= null)