2012-05-15 78 views
6

我想維護一個Web服務和Android應用程序之間的數據庫同步。 下面的代碼工作,但我遇到一些問題:如何啓動/停止Runnable/Handler?

  • 我每次去到一個新的無限進程啓動應用程序的主頁。
  • 過程永遠不會結束

誰能解釋如何啓動和停止這個過程,我希望?
我希望此過程每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

使用removeCallback。 http://developer.android.com/reference/android/os/Handler.html#removeCallbacks%28java.lang.Runnable%29 – Blackbelt

+1

你可以通過使用這個** handler.removeCallbacks()來停止** Handler **; * * –

+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時運行循環,並讓其他線程進入休眠狀態,同時讓應用程序使布爾值爲false。

+0

使用TimerTask我可以控制任務。謝謝。 – Zartch

+2

請勿在Android中使用java定時器。他們不可靠。處理程序是Android中的Timer等價物。 – 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

線程給我完全相同的問題。 – Zartch

0

每5分鐘?你甚至知道handler.postDelayed(this, 1000000);做什麼?它每16.7分鐘啓動一次運行。瞭解如何將分鐘轉換爲毫秒並不是很困難。

handler.removeCallbacks()和您在postDelayed()之前檢查的布爾變量已被提及。