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

我在我的应用程序中有一个计时器,每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 } 

这是从onCreate()方法启动的。

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

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

我如何重新启动计时器?

Solutions Collecting From Web of "Android重新启动计时器被取消后重新启动"

尝试使用:

 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 } 

通过使用这个,你可以再次分配内存给定时器并启动它AFAIK。

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

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

这意味着如果你一旦取消()Timer你不能再运行它。 您需要创buildTimer的新实例,例如,如果您想再次运行onResume()方法。

 @Override public void onResume() { super.onResume(); // intialise new instance of Timer } 

而不是使用TimerTask ,您可以将您的代码(用于更新GPS)移动到服务 。 我觉得这样比较好 你可以调用onCreate() startService()onDestroy() stopService() onDestroy() 。 请注意,服务在主UI线程上运行,因此请确保在GPS更新程序任务中避免出现NetworkOnMainThreadException