2011-05-26 81 views
2

我有一個預定的服務(用於調度我使用一捆BroadcastReceiver和AlarmManager)。服務使用AsyncTask進行一些長時間運行的操作。Android AsyncTask同步

  1. 連接到服務器
  2. 檢查一些更新,如果他們存在
  3. 進行數據更新操作
  4. 加載更新

我打電話從OnStart方法任務是這樣的:

onStart(...){ 
... 
new AsyncUpdate(...).execute(...); 
} 

用戶可以執行更新操作(他按下運行服務的按鈕)。 那麼,如果他在執行AsyncUpdate任務期間按下按鈕呢?根據引用新的工作線程將被創建,所以我需要同步它們。 我使用靜態PARAM從我的服務類吧:

synchronized(MyService.runLock){//public static Object runLock = new Object(); 
...perform download and update operations 
} 

是正確的嗎?

我用過:遠程服務之前,所以服務在一個單獨的線程執行,我不需要這些之間的同步,因爲我知道我只有一個線程。

回答

3

您可以使用getStatus()方法。

保留你的AsyncUpdate的引用並查看它是否返回RUNNING或不。

+0

這就是訣竅......謝謝! – Nick 2011-05-27 07:04:12

2

如果您不介意正在排隊的操作,那麼可能IntentService可能對您有用。它處理自己的隊列並在工作線程上依次執行每個請求。當它用完時,它會自行停止。

+0

我可以在這種服務上使用IPC嗎? – Nick 2011-05-27 07:03:38