2014-12-03 151 views
4

今天在接受採訪時我被問到了這個問題。服務如何在後臺運行 - Android

什麼是服務? 我回復的服務是Android的基本組件,它沒有UI並且在後臺運行。

服務是否在主線程上運行? 否

那麼它如何在後臺運行? .......

我是空白的。有人能解釋一下,如果服務在ui線程中運行,服務如何在後臺運行。

謝謝。

+0

服務在ui /主線程上運行。 – Blackbelt 2014-12-03 16:50:38

+0

@Blackbelt你的意思是說他們不會在後臺運行?背景中的 – ik024 2014-12-03 16:51:44

+0

意味着別的東西。我認爲文檔中帶有* background *意味着服務能夠在沒有用戶交互的情況下運行,即使所有活動都已暫停。 – Blackbelt 2014-12-03 16:54:20

回答

2

服務在UI線程上運行。要在後臺運行服務任務,您需要在該服務中生成一個新線程。在服務上下文中的'背景'可以被看作'可以不用UI運行',但並不意味着它運行在它自己的線程中。

+1

嗯,你說得對。但是他們仍然不應該使用「背景」這個詞 – ik024 2014-12-03 17:01:34

+0

服務對我有什麼好處,那麼,如果它在UI線程上運行? 如果我需要創建一個新的線程無論如何,爲什麼我不會在主程序上創建我的線程,就是這樣? 在這種情況下服務的好處是什麼? – Cookienator 2016-09-25 19:24:21

+0

服務的好處是它可以在沒有可見活動(UI,View)的情況下運行,因此用戶可以離開您的應用程序並進入主屏幕並且操作仍將繼續。完成後,您還可以處理結果並將其存儲在某個地方。在活動中運行線程的情況下,活動將被破壞,並且會丟失(或泄漏)可能導致崩潰/內存不足異常的上下文。 – 2016-09-26 08:54:45

2
official source

報價:

請記住,如果你使用一個服務,它仍然在默認情況下,您的 應用程序的主線程中運行,所以你還是應該在服務中創建一個新的 線程,如果它執行密集或阻止 操作。

「UI線程」基本上就是您的應用程序使用的主線程,它運行的是UI。它根本不限於運行UI。