2013-04-15 59 views
0

我想每15分鐘啓動一次服務。大多數情況下,它會在30秒內退出,但服務時間會超過15分鐘。如果之前的服務呼叫仍在運行,我認爲對於警報管理員來說,啓動服務並不會有好處。我正在考慮在onStartCommand中設置一個標誌,以便在服務運行時不做任何事情就直接返回。但我不確定這是否是處理它的最好方法,因爲onStartCommand返回一個int值,我不知道系統需要什麼值。有沒有最好的方法來做到這一點?Android:使用AlarmManager重複呼叫有時持續時間超過重複時間間隔的服務

+0

但是我聽到(http://stackoverflow.com/questions/13124115/what-happens-if-i-start-an-android-service-which-is-already-running)CommonsWare這個:「不,它不會創建一個新服務,如果該服務已經運行,它將再次用onStartCommand()來調用,以提供新的Intent,但不會創建第二個副本。「新意圖會做什麼? –

+0

我明白了。但是如果我不希望服務在下次應該被調用時再次啓動? –

回答

1

但我從CommonsWare聽到這樣的:「不,這不會創建一個新的服務。如果該服務已在運行,它將與onStartCommand()再次被調用,爲客戶提供新的意圖,但第二個。不會創建副本。「

是啊,這CommonsWare傢伙,他肯定不會寫了很多... :-)

我不認爲這將是很好的alarmmanager啓動,如果前一個服務的服務電話仍在運行。

如果您使用的是IntentService,這不成問題。來自第二個報警的命令將被排隊,等待onHandleIntent()從第一個報警結束。

如果您不使用IntentService,您需要在onStartCommand()中擁有智能來確定您自己的線程仍在拖動中,因此您希望跳過該命令。

但我不確定這是否是最好的方式來處理它,因爲onStartCommand返回一個int值,我不知道系統需要什麼值。

這實際上與您的問題沒有任何關係。只需返回super.onStartCommand(),或者您當前的onStartCommand()方法正在返回。

但是如果我不希望服務再次啓動,直到下一次它應該被調用?

嗯,你可以更換一次性報警的報警重複(使用set()),然後設置下一個報警從先前報警結束了工作的一部分。

+1

謝謝。從馬的嘴裏拿出來很好(我有兩本書)! –