我有一个片段,其中有一个倒计时钟的动画。我想在片段加载后立即启动动画而不需要用户的任何干预。
我现在所做的是在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 :(得分:0)
由于Timer已经异步,因此不应在Handler中使用Timer。已知Timer会产生内存泄漏,因此我建议使用CountDownTimer代替。 您应该在onCreate中创建计时器并在onResume中启动它并在onPause中将其停止。然后你更新onTick中的视图,但你可能需要检查视图是否可用(view!= null)