a)如果我的代碼調用startService()
兩次,意向是按照我給他們調用的順序進行處理,還是可能隨機切換?是startService()意向串行化?
b)會在第二次調用開始之前完成第一次穿過onStartCommand()
,或者它們可能並行運行?
我已閱讀android services guide和參考。雖然他們清楚地展示瞭如何對工作線程進行序列化,但我幾乎沒有發現關於Intents如何交付和處理的信息。
a)如果我的代碼調用startService()
兩次,意向是按照我給他們調用的順序進行處理,還是可能隨機切換?是startService()意向串行化?
b)會在第二次調用開始之前完成第一次穿過onStartCommand()
,或者它們可能並行運行?
我已閱讀android services guide和參考。雖然他們清楚地展示瞭如何對工作線程進行序列化,但我幾乎沒有發現關於Intents如何交付和處理的信息。
如果我的代碼調用startService()兩次,Intents會按照我調用它們的順序進行處理,還是可能隨機切換?
Service
在這方面的行爲沒有記錄,最後我檢查了一下。但是,他們應該按照他們發佈的順序進行調用,基於實踐中似乎發生的情況。
會在第二次調用開始之前第一次通過onStartCommand()完成,或者它們可能並行運行?
這取決於你。默認情況下,在主應用程序線程上調用Service
上的onStartCommand()
,因此一次只能處理一個命令。如果您選擇從onStartCommand()
分叉線程來處理命令,那些線程可以並行運行。
儘管他們清楚地顯示了IntentService工作線程是如何序列化的,但我幾乎沒有發現有關Intents如何交付和處理的信息。
IntentService
保持其自己的線程。您執行onHandleIntent()
而不是(或可能除了)onStartCommand()
。由於只有一個線程,一次只能執行一個onHandleIntent()
。
thx for feedback - 抓撓更多的B)如果**我不**在'onStartCommand()'中啓動一個線程,那麼第一次運行應該在第二次啓動之前完成 - 是嗎? – donfede
@donfede:是的。正如我所指出的,在主應用程序線程上調用onStartCommand(),並且一個線程一次不能做兩件事。 – CommonsWare
ACK - thx - 一直在享受你的書:) – donfede