繁体   English   中英

重新启动onResume()方法中的计时器?

[英]Restarting a timer in the onResume() method?

我正在使用Timer来连续更新TextView ,但是在onResume()方法期间无法重新启动计时器。 我在onPause()onDestroy()方法中使用timer.cancel() ,但是如何在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);

一个更简单的替代方法是使用Handler类。 我不推荐使用Timer类,因为它与Activity的生命周期无关,您将不得不担心自己可能存在的任何线程问题。 使用处理程序的好处在于,所有回调都将在主线程上(因此无需担心线程问题)。 以下是有关如何执行此操作的简单示例。

 @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);
    }
 }

您不重新启动计时器。 而是使用一个新计时器,即在onResume()内部创建一个新计时器。 由于您不再使用上一个,因此垃圾收集将解决该问题。 因此,在onResume()中使用以下代码:

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

public void run() {

    //update the TextView here 

}

}, delay, period);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM