2012-05-15 4 views
6

Я пытаюсь поддерживать базы данных, синхронизированные между Webservice и Android-приложением. ниже код работает, но я столкнуться с некоторыми проблемами:Как запустить/остановить Runnable/Handler?

  • Каждый раз, когда я иду на главной странице App запускается новый бесконечный процесс.
  • процесс никогда не заканчивается

Может кто-нибудь объяснить, как начать и остановить этот процесс, как я хочу?
Я хочу, чтобы этот процесс запускался каждые 5 минут, но только один раз и когда приложение открыто.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Handler handler = new Handler(); 
    final Runnable r = new Runnable() { 
     public void run() { 
      // DO WORK 
      Mantenimiento(); 
      // Call function. 
      handler.postDelayed(this, 1000000); 
     } 
    }; 
    r.run(); 
} 
+1

использование удалятьCallback. http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29 – Blackbelt

+1

вы можете остановить ** Обработчик **, используя этот ** handler.removeCallbacks(); * * –

+0

, но мне нужно остановить его из onDestroy – Zartch

ответ

3

либо использовать TimerTask:

http://thedevelopersinfo.wordpress.com/2009/10/18/scheduling-a-timer-task-to-run-repeatedly/ http://android.okhelp.cz/timer-simple-timertask-java-android-example/

или

может принять Boolean и запустить цикл, в то время как логическое значение true и сделать сон для другого потока, и, оставив приложение сделать Boolean false.

+0

Использование TimerTask Я могу контролировать задачу. Благодарю. – Zartch

+2

Не используйте Java-таймеры в Android. Они ненадежны. Обработчики являются эквивалентами таймера в Android. – black

0

будет использовать этот код:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    final Handler handler = new Handler(); 
    final Thread r = new Thread() { 
     public void run() { 
      // DO WORK 
      Mantenimiento(); 
      // Call function. 
      handler.postDelayed(this, 1000000); 
     } 
    }; 
    r.start(); // THIS IS DIFFERENT 
} 
+0

The Thread дает мне то же самое. – Zartch

0

каждые 5 минут? Вы даже знаете, что делает handler.postDelayed(this, 1000000);? Он запускает runnable каждые 16.7 минут. Не очень сложно узнать, как конвертировать минуты в миллисекунды.

handler.removeCallbacks() и булева переменная, которые вы проверили бы до postDelayed().

Смежные вопросы