2012-06-29 35 views
5
private void setFPAlarm() 
    { 
    Intent intent = new Intent(this, FPService.class); 
    PendingIntent pi = PendingIntent.getService(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT); 

    long nextSearchTimeMillis = DateUtils.MINUTE_IN_MILLIS/2; 
    Time nextSearchTime = new Time(); 
    nextSearchTime.set(nextSearchTimeMillis); 

    AlarmManager FPAlarm = (AlarmManager) getSystemService(Context.ALARM_SERVICE); 
    FPAlarm.setRepeating(AlarmManager.RTC, System.currentTimeMillis(), nextSearchTimeMillis, pi); 
    } 

我正在使用上面的代碼每30秒運行一次我的IntentService。有時候,一個服務進程需要30秒以上的時間,所以另一個服務進程必須在前一個完成之前啓動。我想知道在這種情況下前一個會發生什麼。它被擱置了嗎?第二個等待前一個完成嗎?Android中IntentService的多個實例

我的第二個問題是:我不希望他們互相等待。我想要兩個服務同時運行。因此,無論前一個服務在做什麼,下一個服務應該開始。上述代碼是實現這一目標的正確方法嗎?

+0

不知道,但試試這段代碼。 intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); – rajpara

回答

9

IntentService就像一個工作請求隊列。直到onHandleIntent完成之前的Intent纔會處理新的意圖。爲什麼你要每30秒運行一次IntentService,如果有時需要超過30秒才能完成?

關於提問,有時候對於狹義問題的答案要麼是「你不能做你想做的事」或者「你所做的不會做你認爲它做的事」。如果您提供問題背景,則更容易讓的受訪者添加更好的解決方案。

就你而言,我只能猜測你應該在需要的時候向IntentService發起一個Intent,並讓IntentService的排隊機制處理剩下的事情。作爲替代,您可以使用常規服務和線程池。

+0

因爲我每30秒鐘錄製一個簡短的音頻查詢並對其使用一些信號處理。我對不同的查詢需要不同的結果。 – Erol