2013-04-17 3 views
0

Я использую Timer() из-за его точности, но работает в том же порядке, что и PostDelayed Handler. Он называется только один раз. Вот код таймера:Android Java Timer()

public void setWFT() { 
     WFT = new Timer(); 
     WFT.schedule(new TimerTask() {   
      @Override 
      public void run() { 
       WFTTimerMethod(); 
      } 
     }, 60000); // 60 seconds delay 
    } 

    private void WFTTimerMethod() { 
     this.runOnUiThread(Timer_Tick); 
    } 

    private Runnable Timer_Tick = new Runnable() { 
     public void run() { 
      // My commands here 
     } 
    }; 

Это только вызовы выполняются() один раз через 60 секунд после того, как таймер запускается. Иногда мне приходится отменить таймер, чтобы обновить задержку (замените значение «60000»). Чтобы снова запустить таймер, я просто воссоздаю таймер, снова вызвав WFT() с новым значением задержки.

Проблема, когда я отменить таймер с помощью:

WFT.cancel(); 
WFT.purge(); 

Таймер не запускается. run() не выполняется, когда это предполагается. Так что мой вопрос: я использую cancel() и purge() или просто cancel()?

Благодаря

ответ

3

From the Java API на purge():

Большинство программ не будет иметь никакой необходимости вызывать этот метод. Он предназначен для использования редким приложением, которое отменяет большое количество задач. Вызов этого метода торгует время для пробела: время выполнения метода может быть пропорционально n + c log n, где n - количество задач в очереди, а c - количество отмененных задач.

Так что вам нужно только позвонить cancel()

+0

Кроме того, поскольку мой Timer() действует как PostDelayed и вызывается только через 60 секунд в будущем, отменяет() отменяет и уничтожает таймер до его выполнения или не будет влиять на мой Timer() как это только один раз? – KickAss

+0

Из той же ссылки API: 'cancel()' "Завершает этот таймер, отбрасывая любые запланированные задачи. Не мешает выполняемой в данный момент задаче (если она существует). После того, как таймер был завершен, его поток выполнения завершается изящно, и на нем не может быть запланировано больше задач ». Таким образом, он отменяет все запланированные события. –

+0

Хорошо. Это прекрасно. спасибо – KickAss

0

из cancel() документации:

Нет больше задач может быть запланировано на этот таймер.