片段加载后立即开始动画的正确方法

时间:2017-06-05 11:06:34

标签: android android-animation

我有一个片段,其中有一个倒计时钟的动画。我想在片段加载后立即启动动画而不需要用户的任何干预。

我现在所做的是在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)还有什么我应该改变的吗?

1 个答案:

答案 0 :(得分:0)

由于Timer已经异步,因此不应在Handler中使用Timer。已知Timer会产生内存泄漏,因此我建议使用CountDownTimer代替。 您应该在onCreate中创建计时器并在onResume中启动它并在onPause中将其停止。然后你更新onTick中的视图,但你可能需要检查视图是否可用(view!= null)