2

我使用 aTimer不断更新 a ,但是在该方法TextView期间我无法重新启动计时器。onResume()timer.cancel()onPause()andonDestroy()方法中使用,但是如何在 中重新启动计时器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);
4

2 回答 2

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);
    }
 }
于 2012-04-16T14:18:54.673 回答
2

你不重新启动计时器。而是使用一个新的计时器,即在 onResume() 中创建一个新的计时器。由于您不再使用前一个,垃圾收集会处理它。所以在 onResume() 中使用以下代码:

timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask() {

public void run() {

    //update the TextView here 

}

}, delay, period);
于 2012-04-16T14:01:06.263 回答