service和thread的区别,何时用service,何时用thread?
按服務性質分local service和remote service
當它運行的時候如果是Local Service,那么對應的?Service是運行在主進程的?main?線程上的。如:onCreate,onStart?這些函數在被系統調用的時候都是在主進程的?main?線程上運行的,如果此時你在Service里編寫了非常耗時的代碼,程序必定會出現ANR的!
當它運行的時候如果是Remote?Service,那么對應的?Service?則是運行在獨立進程的?main?線程上。
按啟動方式分bindService和startedService?
其中bindService更類似于客戶端和服務端,是一種輕量級的ipc通信,這種通信的載體是binder,它是在linux層交換信息。
那么Service和Thread到底什么聯系,為什么很多人都容易混淆二者?
之所以有不少人會把它們聯系起來,主要就是因為Service的后臺概念。Thread我們大家都知道,是用于開啟一個子線程,在這里去執行一些耗時操作就不會阻塞主線程的運行。而Service我們最初理解的時候,總會覺得它是用來處理一些后臺任務的,一些比較耗時的操作也可以放在這里運行,這就會讓人產生混淆了。
其實Service和Thread根本就不是一個級別的東西,Service是系統的四大組件之一,Thread只是一個用來執行后臺任務的工具類,由當前程序托管,而service托管于系統的servicemanager。這樣做的目的是因為Thread獨立于activity,一旦activity結束,該線程也不一定會執行完成,而此時你不再持有該thread的引用,你無法在控制他了。而且我們有的時候也需要多個不同的activity控制一個服務。這些thread都不能實現,所以我們引進service。?
總結:
????? ?Service是系統的四大組件之一,Thread只是一個用來執行后臺任務的工具類
Service可以設置獨立的進程;Thread不可以,只能存在于進程中。
Service有自己的生命周期。如果是以bind的方式啟動,生命周期跟activity相同。如果是以start方式啟動,不調用stop會一直運行在后臺;Thread運行完了就結束了,啟動后跟activity沒有關系了,哪怕activity結束了,thread也會在后臺運行。
不同的Activity可以調用同一個Service;不同的Activity不能調用同一個Thread。
Service如果是運行在后臺的,可以注冊接收系統或自定義廣播;Thread不能接收廣播
不同的應用程序可以共享同一Service,但不能共享同一Thread。
service中可以創建thread,避免ANR。
Thread在后臺運行(Activty stop)的優先級低于后臺運行的Service,如果執行系統資源緊張,會優先殺死前一種,后臺運行的Service一般情況下不會被殺死,如果被殺死,系統空閑時會重新啟動service.
什么時候用Service,什么時候用多線程?
從邏輯上你認為需要一個后臺操作,但跟我們現在主線程操作通訊頻繁,邏輯關系緊密,就用多線程(直接用)
比如你要下載圖片,然后在當前activity上顯示,那就用多線程
能夠從邏輯上區分開來,又或者耗時較長,就用后臺服務
比如下載電影就用service,這樣即使來電話了,也不影響下載
總結
以上是生活随笔為你收集整理的service和thread的区别,何时用service,何时用thread?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Service的理解和使用
- 下一篇: Android Service下载文件并