2017-06-05 74 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)