我正在使用Timer
不断更新TextView
,但我在onResume()
方法期间无法重新启动计时器。我在timer.cancel()
和onPause()
方法中使用onDestroy()
,但如何在onResume()
中重新启动计时器?
这是我的计时器代码...
int delay = 1000;
int period = 1000;
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//I update the TextView here
}
}, delay, period);
答案 0 :(得分:5)
更简单的替代方法是使用Handler
类。我不推荐Timer类,因为它与Activity的生命周期没有关系,你必须自己担心任何潜在的线程问题。使用Handler的好处是你的所有回调都将在主线程上(因此不需要担心线程问题)。以下是如何执行此操作的简单示例。
@Override
protected void onCreate(Bundle savedInstanceState)
{
....
mHandler = new Handler();
}
@Override
protected void onResume()
{
mHandler.postDelayed(myRunnable, UPDATE_RATE);
}
@Override
protected void onPause()
{
mHandler.removeCallbacks(myRunnable);
}
private final Runnable myRunnable= new Runnable() {
@Override
public void run()
{
//Do task
mHandler.postDelayed(myRunnable, UPDATE_RATE);
}
}
答案 1 :(得分:2)
你没有重新启动计时器。而是使用一个新的计时器,即onResume()内部创建一个新的计时器。当您不再使用前一个时,垃圾收集将处理它。所以在onResume()中使用以下代码:
timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
//update the TextView here
}
}, delay, period);