2012-03-21 54 views
0

我有運行服務一旦這種IntentService代碼:運行Android功能反覆IntentService

protected void onHandleIntent(Intent intent) { 
    final ResultReceiver receiver = intent.getParcelableExtra("receiver"); 
    String command = intent.getStringExtra("command"); 
    Bundle b = new Bundle(); 
    b.putString("results", results); 
    if(command.equals("query")) { 
     receiver.send(1, Bundle.EMPTY); 
     try {     
      results = sendGetMessage(); 
      b.putString("results", results); 
      receiver.send(2, b); 
     } catch(Exception e) { 
      b.putString(Intent.EXTRA_TEXT, e.toString()); 
      receiver.send(0, b); 
     }  
    } 
    this.stopSelf(); 
    Log.d("ServiceFinished", "ServerConnection.java Service has finished"); 
} 

我想,直到我停止服務我sendGetMessage()函數來反覆運行每5秒..我怎樣才能做它?

回答

3

你會想把它放在它自己的Thread中並永久地循環它。

Thread thread = new Thread() 
{ 
    @Override 
    public void run() { 
     try { 
      while(true) { 
       Thread.sleep(5000); // for the 5 seconds requirement 
       results = sendGetMessage(); 
      } 
     } catch (InterruptedException e) { 
      e.printStackTrace(); 
     } 
    } 
}; 

thread.start(); 
+0

對不起忘了:我想ti每5秒重複運行一次.. – 2012-03-22 00:05:45

+0

這也是一個不好的解決方案:系統可以選擇最終殺死你的線程... – 2012-03-22 00:35:38

+0

@AsafNevo,我添加了一條線,它會讓它每5秒運行一次。 – ajacian81 2012-03-22 09:26:33

0

有很多選擇,但我更喜歡使用ScheduledExecutorService。請參閱下面的示例代碼:

ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(1); 

// This schedule a task to run every 5 seconds: 
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 
    public void run() { 
    // Do the actual job: 
    results = sendGetMessage(); 

    // In case if you need update UI, simply do this: 
    runOnUiThread(new Runnable() { 
     public void run() { 
     // update your UI component here. 
     myTextView.setText("refreshed"); 
     } 
    }); // end of runOnUiThread 
    } 
}, 0, 5, TimeUnit.SECONDS); 

請記住在停止服務之前正確完成/關閉可運行任務。