2012-04-05 71 views
0

context.startService()調用是否保證按照發送的順序由服務獲取?context.startService()調用是否保證按照發送的順序由服務獲取?

考慮活動:

Intent intent; 

intent = new Intent(MyIntents.ADD_BATCH_ACTION); 
intent.putExtra(MyIntents.BATCH_ACTION_NAME, "Bake donuts"); 
startService(intent); 

intent = new Intent(MyIntents.ADD_BATCH_ACTION); 
intent.putExtra(MyIntents.BATCH_ACTION_NAME, "Make a coffee"); 
startService(intent); 

intent = new Intent(MyIntents.ADD_BATCH_ACTION); 
intent.putExtra(MyIntents.BATCH_ACTION_NAME, "Fetch coffee and donut to room 12"); 
startService(intent); 

startService(new Intent(MyIntents.FLUSH_ADDED_ACTIONS)); 

一些動作可以的hve很多共同的工作,我可以優化服務,如果我是確保它們在批處理執行。

我可以假設服務onStartCommand將以相同的順序執行嗎?

問候,託梅克

回答

1

是context.startService()調用保證在同一順序的服務來獲得性,他們被送到?

雖然我覺得他們發生的順序產生,AFAIK這不是記錄的行爲,因此,我不會在指望它。

某些操作可以有很多常見的工作,如果我確定它們是在批處理中執行的話,我可以優化服務。

然後只調用startService()一次,一切都在您的「批次」中。意圖額外支持許多類型的數組,所以嘗試打包一個額外的數組而不是一個。

+0

我同意這個評估。有趣的是,如果你正在主線程中調用這些調用,並且你的服務處於同一個進程中,我總會看到startService()意圖按提供的順序處理。原因是onStart()和onStartCommand()都在主線程上執行,並且在startService()調用甚至可以返回之前必須「完成」。 – 2012-04-05 14:59:01

+0

你一般是對的,但我希望能夠從不同的活動中批量操作,然後從另一個活動刷新。例如一個3步表單接口,或者一個任務隊列一起執行優化 - >它們都共享公共資源,但在邏輯上是獨立的。 – 2012-04-05 15:07:17

相關問題