0

假設我希望我的應用程序將數據從聯機數據庫同步到本地數據庫,我知道服務是要查找的組件。從IntentService運行新線程

如果我啓動一個普通的服務,我知道它在主線程中啓動,並且我運行的任何耗時的任務都會阻止UI。這意味着我將不得不使用類似AsyncTask的東西來完成工作。另一方面,如果我使用Intent服務,我知道它運行在並行線程上,如果我運行一個長任務,UI不會被阻塞。 我打電話的任何其他意向服務將排隊等候。

但是如果我從IntentService創建一個並行線程來進行網絡調用會發生什麼?

意圖服務會等待我的網絡調用完成還是將其調用並行線程並執行隊列中的下一個意圖服務?

+1

爲什麼你需要在並行線程中創建並行線程來進行網絡調用?直接在'IntentService'中使用 –

+0

爲什麼'if'語句中的並行線程退出? – Xenolion

+0

我只是好奇。我不會讓那個哈哈 –

回答

0

僅在Service的主(UI)線程上調用生命週期調用(例如:onCreate()onStartCommand())。如果你有後臺活動,你可以在onStartCommand()開始自己的後臺線程。您無需爲此使用IntentService

IntentService是具有特定行爲的Service的具體實現。您通過致電startService()並傳遞描述要完成的工作的Intent來發送它「工作」。 IntentService運行,直到所有排隊的「工作」完成,然後關閉。 IntentService只是一個位於常規Service之上的thi8n層,它處理「工作」的排隊,後臺線程中「工作」的執行以及IntentService的自動關閉。如果這不完全是您想要的行爲,則不應該嘗試使用IntentService,因爲它不適合所有情況。在Service中自己啓動後臺線程並不困難。