2012-06-12 49 views
0

我正在嘗試創建一個每5秒鐘執行一次的服務。 問題是我把while(true)它給了我一個錯誤。 我想這是不被允許的。如果是這樣,那麼實施重複性方法的更好方法是什麼?使用重複方法創建服務

public class repService extends Service { 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    while(true){ 
     Thread timer = new Thread(){ 
      public void run(){ 
       try { 
        sleep(5000); 
        // do something 
       } catch (InterruptedException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } finally { 
        // do something 
       } 
      } 
     }; 
     timer.start(); 
    } 
} 

回答

0
which every 5 seconds does something 

您可以使用Timer().schedule每5秒重複一次任務。

new Timer().schedule(new TimerTask() { 

      @Override 
      public void run() { 
       //Do your task here 

      } 
     }, System.currentTimeMillis(), 5000); 

如果您需要修改或UI部分起到然後確保比代碼寫在runOnUiThread

+0

如果我想啓動的AsyncTask將彈出的主UI的對話(我想象是指用戶當前正在進行的活動)。 AsyncTask是一個可運行的操作? –

+0

@vipulshah:計時器是在UI線程還是單獨的線程上運行?另外,如果我們使用報警管理器(但在這種情況下會消耗更多的電池嗎?) – Basher51

1

您不能將語句放在方法外運行。把同時循環裏面onCreateonStartCommand你的服務方法。這些方法保證一旦你的服務啓動就會被調用。

以及執行重複任務,使用HandlerThreadLooperHandler和處理程序的postDelayed方法來好好利用它。

1
Timer timer = new Timer(); 
timer.scheduleAtFixedRate(new TimerTask() {  
    @Override 
    public void run() { 
     // do something  
    } 
}, 0, 5000); 
+0

會每5秒循環一次嗎? –

+0

什麼是由waqas建議的looper差異 –

+0

是的,它的區別在於,他將第一個參數設置爲第一次運行它的日期,而我的一次運行,第一個參數是延遲,第二個參數是延遲與他的間隔相同。 – Carnal