取消后,Android重新启动计时器

pte*_*ira 13 android timer android-asynctask

我的应用程序中有一个计时器,每隔15秒启动一次AsyncTask.

Timer timer = new Timer();

public void AsynchTaskTimer() {
    final Handler handler = new Handler();

    TimerTask timertask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    try {
                        new updateGPSTask().execute();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer.schedule(timertask, 0, 15000); // execute in every 15sec
}
Run Code Online (Sandbox Code Playgroud)

这是从该onCreate()方法启动的.

当我调用另一个活动时,我需要取消这个计时器,timer.cancel()onPause()在我的主要活动中使用我的方法.

现在,当我返回主要活动时,我需要重新启动计时器.我试图重新发起AsynchTaskTimer()onRestart()方法,但我得到一个java.lang.IllegalStateException: Timer was canceled.

如何重新启动计时器?

San*_*lik 19

尝试使用:

public void AsynchTaskTimer() {
    final Handler handler = new Handler();

    TimerTask timertask = new TimerTask() {
        @Override
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    try {
                        new updateGPSTask().execute();
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                    }
                }
            });
        }
    };
    timer = new Timer(); //This is new
    timer.schedule(timertask, 0, 15000); // execute in every 15sec
    }
Run Code Online (Sandbox Code Playgroud)

通过使用它,您可以再次将内存分配给Timer并启动它AFAIK.


Sim*_*iak 14

那么什么说有关cancel()方法的文档:

请注意,从重复计时器任务的run方法中调用此方法绝对可以保证计时器任务不会再次运行.

这意味着如果您曾经取消()计时器,则无法再次运行它.您需要创建Timer的新实例,例如,onResume()如果要再次运行它,请在方法中创建.

@Override
public void onResume() {
   super.onResume();
   // intialise new instance of Timer
}
Run Code Online (Sandbox Code Playgroud)