2012-12-12 35 views
0

a)如果我的代碼調用startService()兩次,意向是按照我給他們調用的順序進行處理,還是可能隨機切換?是startService()意向串行化?

b)會在第二次調用開始之前完成第一次穿過onStartCommand(),或者它們可能並行運行?

我已閱讀android services guide和參考。雖然他們清楚地展示瞭如何對工作線程進行序列化,但我幾乎沒有發現關於Intents如何交付和處理的信息。

回答

2

如果我的代碼調用startService()兩次,Intents會按照我調用它們的順序進行處理,還是可能隨機切換?

Service在這方面的行爲沒有記錄,最後我檢查了一下。但是,他們應該按照他們發佈的順序進行調用,基於實踐中似乎發生的情況。

會在第二次調用開始之前第一次通過onStartCommand()完成,或者它們可能並行運行?

這取決於你。默認情況下,在主應用程序線程上調用Service上的onStartCommand(),因此一次只能處理一個命令。如果您選擇從onStartCommand()分叉線程來處理命令,那些線程可以並行運行。

儘管他們清楚地顯示了IntentService工作線程是如何序列化的,但我幾乎沒有發現有關Intents如何交付和處理的信息。

IntentService保持其自己的線程。您執行onHandleIntent()而不是(或可能除了)onStartCommand()。由於只有一個線程,一次只能執行一個onHandleIntent()

+0

thx for feedback - 抓撓更多的B)如果**我不**在'onStartCommand()'中啓動一個線程,那麼第一次運行應該在第二次啓動之前完成 - 是嗎? – donfede

+0

@donfede:是的。正如我所指出的,在主應用程序線程上調用onStartCommand(),並且一個線程一次不能做兩件事。 – CommonsWare

+0

ACK - thx - 一直在享受你的書:) – donfede