2013-06-24 94 views
1

我想使用IntentService作爲應用程序init組件。我希望它能夠接收到這個意圖,在調用onConnected()之後調用Google Play Services並做一些後臺工作。就像谷歌的教程顯示的活動一樣。 使用IntentService來完成這種工作是否安全? 我想知道,因爲onHandleIntent只是幾行代碼,所有的工作都必須在onConnected調用之後完成。所以 - 我理解它是正確的,在完成onHandleIntent之後,IntentService將被銷燬並且不會執行任何操作|來自回撥服務的NPE將被拋出? 只要調用onConnected,是否有任何可能讓IntentService保持活動狀態,還是應該使用某種BroadcastReceiver + Service模式?IntentService註冊回調

回答

3

使用IntentService做這種工作是否安全?

否。一旦onHandleIntent()返回,如果在此期間沒有收到新命令,則服務將被銷燬。試圖從IntentService嘗試執行異步操作是不安全的,因爲當操作完成時服務不僅不可用,而且可能終止整個進程(與任何後臺進程一樣,尤其是沒有運行服務的進程)。

我應該使用一些BroadcastReceiver + Service模式嗎?

我不知道BroadcastReceiver部分,但您肯定歡迎使用常規Service。工作完成後,請務必致電stopSelf()

+0

感謝您試圖從IntentService執行異步操作是不安全的。我正在拼命尋找某個地方。 –

+0

@VirendraSingh:是的,無論是使用「IntentService」和同步操作,還是使用「服務」,異步操作和自己的邏輯在完成所有背景調用時調用stopSelf()。 – CommonsWare