android-Service和Thread的區別


1.服務不是單一的進程。服務沒有自己的進程,應用程序可以不同,服務運行在相同的進程中。

2.服務不是線程。可以在線程中工作。

一.在應用中,如果是長時間的在后台運行,而且不需要交互的情況下,使用服務。

同樣是在后台運行,不需要交互的情況下,如果只是完成某個任務,之后就不需要運行,而且可能是多個任務,需需要長時間運行的情況下使用線程。

二.如果任務占用CPU時間多,資源大的情況下,要使用線程。

 

servie是系統的組件,它由系統進程托管(servicemanager);它們之間的通信類似於client和server,是一種輕量級的ipc通信,這種通信的載體是binder,它是在linux層交換信息的一種ipc。而thread是由本應用程序托管。

 

1). Thread:Thread 是程序執行的最小單元,它是分配CPU的基本單位。可以用 Thread 來執行一些異步的操作。

 

2). Service:Service 是android的一種機制,當它運行的時候如果是Local Service,那么對應的Service 是運行在主進程的 main 線程上的。如:onCreate,onStart 這些函數在被系統調用的時候都是在主進程的 main 線程上運行的。如果是Remote Service,那么對應的 Service 則是運行在獨立進程的 main 線程上

 

既然這樣,那么我們為什么要用 Service 呢?其實這跟 android 的系統機制有關,我們先拿Thread 來說。Thread 的運行是獨立於 Activity 的,也就是說當一個 Activity 被 finish 之后,如果你沒有主動停止 Thread 或者 Thread 里的 run 方法沒有執行完畢的話,Thread 也會一直執行。因此這里會出現一個問題:當 Activity 被 finish 之后,你不再持有該 Thread 的引用。另一方面,你沒有辦法在不同的 Activity 中對同一 Thread 進行控制。  

 

舉個例子:如果你的 Thread 需要不停地隔一段時間就要連接服務器做某種同步的話,該 Thread 需要在 Activity 沒有start的時候也在運行。這個時候當你 start 一個 Activity 就沒有辦法在該 Activity 里面控制之前創建的 Thread。因此你便需要創建並啟動一個 Service ,在 Service 里面創建、運行並控制該 Thread,這樣便解決了該問題(因為任何 Activity 都可以控制同一 Service,而系統也只會創建一個對應 Service 的實例)。  

 

因此你可以把 Service 想象成一種消息服務,而你可以在任何有 Context 的地方調用Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在 Service 里注冊 BroadcastReceiver,在其他地方通過發送 broadcast 來控制它,當然這些都是 Thread 做不到的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM