Android中爲何須要服務?

在解釋這個問題以前, 先來看一個Android系統中進程的優先級(從高到低)android

  1. 前臺進程(foreground process ):  一個應用程序啓動, 而且能夠直接相應用戶的點擊,觸摸事件.那麼這樣 進程就是前臺進程, 它的優先級的最高的. 
  2. 可視進程(visible process) :  一個應用程序也啓動了, 原本是直接處於前臺,能夠直接相應用戶的觸摸, 點擊事件的,可是 如今一個其餘的的應用程序蓋住了它,可是還看得見. 那麼這種進程稱之爲 可視進程.
  3. 服務進程(service process ): 一個應用程序 若是正常的退出了,可是這個應用程序啓動的時候, 有一個服務啓動了, 一直在後臺運行, 那麼這種進程就是屬於 服務進程.
  4. 後臺進程(background process): 一個應用程序 啓動了(可是這個應用程序中沒有 服務在運行了),  這個時候 點擊了 home鍵(小房子), 那麼這種進程就是屬於 後臺進程
  5. 空進程(empty process) : 一個應用程序,如今正常的退出了,沒有任何組件在繼續運行着, 那麼這種進程稱之爲 空進程. 

因而可知, Service對於android系統來講,殺死的優先級別是比較低的,通常不會殺死service, 這就保證了Service能夠長期在後臺運行.線程

 

另外, Service是沒有界面的, 也是運行在主線程中的,因此若是要在Service中執行耗時的操做,須要新建一條線程.對象

 

服務分爲兩種:

1.本地服務(Local Service):用於應用程序內部

功能:用於實現應用程序本身的一些耗時任務,好比查詢升級信息,並不佔用應用程序好比Activity所屬線程,而是單開線程後臺執行,這樣用戶體驗比較好。接口

 

使用:在Service能夠調用Context.startService()啓動,調用Context.stopService()結束。在內部能夠調用Service.stopSelf() 或 Service.stopSelfResult()來本身中止。不管調用了多少次startService(),都只需調用一次stopService()來中止。進程

 

2.遠程服務(Remote Sercie):用於android系統內部的應用程序之間

 

功能:可被其餘應用程序複用,好比天氣預報服務,其餘應用程序不須要再寫這樣的服務,調用已有的便可。事件

 

使用:能夠定義接口並把接口暴露出來,以便其餘應用進行操做。客戶端創建到服務對象的鏈接,並經過那個鏈接來調用服務。調用Context.bindService()方法創建鏈接,並啓動,以調用 Context.unbindService()關閉鏈接。多個客戶端能夠綁定至同一個服務。若是服務此時尚未加載,bindService()會先加載它。ci

相關文章
相關標籤/搜索