Android中Service與Thread的區別

不少時候,你可能會問,爲何要用 Service,而不用 Thread 呢,由於用 Thread 是很方便的,比起 Service 也方便多了,下面我詳細的來解釋一下。 android

 

1). Thread:Thread 是程序執行的最小單元,它是分配CPU的基本單位。能夠用 Thread 來執行一些異步的操做。 服務器

2). Service:Service 是android的一種機制,當它運行的時候若是是Local Service,那麼對應的 Service 是運行在主進程的 main 線程上的。如:onCreate,onStart 這些函數在被系統調用的時候都是在主進程的 main 線程上運行的。若是是Remote Service,那麼對應的 Service 則是運行在獨立進程的 main 線程上。所以請不要把 Service 理解成線程,它跟線程半毛錢的關係都沒有! 異步

  

既然這樣,那麼咱們爲何要用 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 的實例)。 spa

  

所以你能夠把 Service 想象成一種消息服務,而你能夠在任何有 Context 的地方調用 Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也能夠在 Service 裏註冊 BroadcastReceiver,在其餘地方經過發送 broadcast 來控制它,固然這些都是 Thread 作不到的。 線程

相關文章
相關標籤/搜索