2014-07-29 2 views
1

Я читал здесь несколько сообщений об остановке таймера с помощью функции cancel(); метод, но независимо от того, как я пытаюсь, таймер продолжает работать в фоновом режиме после появления onPause().Android TimerTask не перестает использовать «timer.cancel()», когда onPause

(Обратите внимание, что я выполняю AsyncTask внутри таймера, я знаю, что он должен запускаться только один раз, но я боюсь, что если я запустил AsyncTask в основном потоке, он повесит мое основное действие.)

Итак, почему таймер не остановится onPause()?

} //end on create 


     @Override 
     protected void onPause() {  
      super.onPause();    
      this.timer.cancel(); 
      this.timer.purge(); 

     } 

     @Override 
     protected void onResume() {  
      super.onResume(); 
      callAsynchronousTask(); 
     } 

     public void callAsynchronousTask() {    
      final Handler handler = new Handler(); 
      timer = new Timer(); 
      TimerTask doAsynchronousTask = new TimerTask() {  
       @Override 
       public void run() { 
        handler.post(new Runnable() { 
         public void run() {  
          try { 
           MyTask task = new MyTask(); 
           task.execute("Param 1", "Param 2", "Param 3"); 
          } catch (Exception e) { 
          } 
         } 
        }); 
       } 
      }; 
      timer.schedule(doAsynchronousTask, 0, 2000);  

     } 

ответ

1

Когда вы отменили свой таймер, task уже начал выполнение. Таким образом, даже если таймер отменяется, AsyncTask выполняется в фоновом режиме.

Не существует идеального способа обработки отмены AsyncTask. Вы можете проверить этот вопрос: Android - Cancel AsyncTask Forcefully