2012-02-05 31 views
5

所有我需要知道的是,當我可以使用獨立線程進行某些操作時,爲什麼我需要Service。 這是什麼,一個服務可以做,但一個線程不能? 我確實去了很多帖子,但找不到滿意的答案。Android中服務和線程的區別?

回答

11

服務的主要優點是可以訪問具有獨立生命週期的Context對象。這允許通過許多活動重用通用代碼,並且在公共或公開服務的情況下允許許多應用程序。

線程是一種不阻塞其他工作的工作機制。

服務並不暗示線程,線程也不暗示服務。他們是兩個完全不同的東西。我傾向於在需要上下文來完成工作的情況下使用服務,但希望將代碼與我的活動分開以提高可重用性。

+0

好的。如果萬一我在工作線程中傳遞上下文,那麼它會起到這個作用嗎? – SAMD 2012-02-06 06:22:11

+0

你還沒有解釋案件或目的,所以它很難告訴你。 – 2012-02-06 15:46:46

+0

其實我正在尋找一些特殊的情況下,服務是必要的使用。我被問及這個問題,無法回答,所以我試圖尋求幫助使用堆棧溢出。 – SAMD 2012-02-07 06:55:46

3

Difference between Service and Threaads

請訪問此鏈接,我希望你會發現在這個環節的答案。

簡而言之,Service和Thread之間的主要區別在於,Service在它自己的線程上在Main(UI)線程和Thread符號上運行。如果我們使用Service來處理長時間任務,那麼它可能會導致阻止主UI線程。

請訪問給出的鏈接瞭解更多詳情。

29

服務:是一個在後臺執行長時間運行操作的Android組件,主要是用戶界面。

線程:是一個O.S級別的功能,允許您在後臺執行一些操作。

雖然在概念上兩者看起來相似,但有一些關鍵的區別。

1.服務 - 如果它在執行工作時被破壞,由於內存不足的情況在Android中間。然後,如果您從onStartCommand()返回了START_STICKY或START_REDELIVER_INTENT,則android將確保它將重新啓動您的服務。

2.線程 - 如果它由於內存不足而被android在中間銷燬,那麼android不會保證再次重新啓動它。這意味着用戶失去了他的一半工作。

3.服務 - 是android的一個組件,所以它具有優先級,因爲內存不足導致應用程序被銷燬。

4.線程 - 不是android的組件,所以android不會考慮線程優先級,同時由於內存不足而導致應用程序死機。

我會盡力解釋這第三點。

讓我們說你需要從你的活動連接到互聯網。您可以通過使用服務(使用線程)或直接在活動中創建線程來完成。考慮你在線程中連接到互聯網的第二種情況。然後

i。如果用戶在後臺運行時關閉了活動,將會發生什麼情況。該線程是否會繼續在背後運行?答案是你不能真正預測。

ii。假設在上述情況下,即使在殺死活動後,您的線程仍繼續執行其預期的操作。然後在手機中出現內存不足的情況。然後,這個應用程序將是第一個易受攻擊的應用程序被殺,因爲這個應用程序沒有優先權。

因此,底線是:如果你想做一些沉重的後臺功能,那麼最好是有線程服務。如果您覺得只要您的活動處於活動狀態,該後臺功能就會處於活動狀態,那麼請使用具有異步任務的線程或活動進行活動。

希望它有幫助。