Android四大組件簡單理解——服務(wù)(Service)

一、服務(wù)(Service)

??????? Service是Android系統(tǒng)中的四大組件之一,它是一種長生命周期的,沒有可視化界面,運行于后臺的一種服務(wù)程序,用于在后臺完成用戶指定的操作(如:復(fù)雜的計算,音樂播放,下載等)??梢岳斫鉃槭菦]有前臺的Activity,適合用來運行不需要前臺界面的代碼,服務(wù)可以被手動關(guān)閉不會重啟,但是如果被自動關(guān)閉,內(nèi)存充足就會重啟。

??????? 特點:無用戶界面、在后臺運行、生命周期長。

二、服務(wù)的分類:

??? 1、按照使用范圍分類:本地服務(wù)和遠程服務(wù)。

??? (1)、本地服務(wù):Local? Service

?????????? 優(yōu)點:本地服務(wù)在一定程度上節(jié)約了資源,另外本地服務(wù)因為在同一個進程,因此不需要IPC,也不需要AIDL。相應(yīng)BindService會方便很多。

?????????? 缺點:主進程被Kill后,服務(wù)便會終止。

?????????? 區(qū)別:本地服務(wù)依附在主進程上,而不是獨立的進程,用于應(yīng)用程序內(nèi)部。

??????? ?? 應(yīng)用:音樂播放服務(wù)。

? (2)、遠程服務(wù):Remote Service

??????? ? 優(yōu)點:對應(yīng)進程名格式為所在包名加上指定的android:process字符串。由于是獨立的進程,因此在Activity所在進程被Kill的時候,該服務(wù)依然在運行,不受其他進程影響,有利于為多個進程提供服務(wù),具有較高的靈活性。

???????? 缺點:會占用一定的資源,并且使用AILD進行IPC稍微麻煩一點。

???????? 區(qū)別:遠程服務(wù)是獨立的進程,用于android系統(tǒng)內(nèi)部的應(yīng)用程序之間,可被其他應(yīng)用程序復(fù)用。

????? ?? 應(yīng)用:提供天氣狀況、時間日歷的系統(tǒng)服務(wù),這種Service是常駐的。

2、按運行類型分類:前臺服務(wù)和后臺服務(wù)

?? (1)、前臺服務(wù):

????????? 區(qū)別:會在通知欄顯示正在運行的Notification

????????? 應(yīng)用:當(dāng)服務(wù)被終止的時候,通知一欄的Notification也會消失,對用戶有一定的通知作用,如音樂播放服務(wù)。

?????? 服務(wù)是在調(diào)用 startForeground(android 2.0 及其以后版本)使服務(wù)成為前臺服務(wù)。這樣做的好處在于,當(dāng)服務(wù)被外部強制終止掉的時候,ONGOING 的 Notification 會被移除掉。

??? (2)、后臺服務(wù):

?????????? 區(qū)別:默認(rèn)的后臺服務(wù),沒有Notification。

?????????? 應(yīng)用:某些不需要提示的服務(wù)運行或終止時,用戶看不到效果,如天氣更新,日期同步,郵件同步等。

3、按照使用方法分類:啟動型和綁定型

??????? (1)、startService(啟動型服務(wù)):當(dāng)應(yīng)用程序組件(如Activity)調(diào)用startService()方法啟動時,服務(wù)處于started狀態(tài)。

?????? 區(qū)別:是由其他組件(如Activity)調(diào)用startService()啟動的,這導(dǎo)致服務(wù)的onStartCommand()方法被調(diào)用。當(dāng)服務(wù)是started狀態(tài)時,其生命周期與啟動它的組件無關(guān)。并且可以在后臺無限期運行,即使啟動服務(wù)的組件已經(jīng)被銷毀,因此服務(wù)需要在完成任務(wù)后調(diào)用stopService(),或者由其他組件調(diào)用stopService()方法停止。

???????? (2)、bindService(綁定型服務(wù)器):當(dāng)應(yīng)用程序組件調(diào)用bindService()方法綁定到服務(wù)時,服務(wù)處于bound狀態(tài)。

?????? 區(qū)別:使用bindService()方法啟用服務(wù),調(diào)用者與服務(wù)綁定在了一起,調(diào)用者一旦退出,服務(wù)也就終止了,大有“不求同時生,必須同時死”的特點。

4、注冊:和Activity一樣,應(yīng)用中的每個service在使用前都需要在清單文件中進行注冊,否則應(yīng)用不識別。

5、Service與Thread的區(qū)別。

???? Service與Thread無任何關(guān)系。之所以有不少人把他們聯(lián)系起來,主要是因為Service的后臺概念。

??? 后臺:后臺任務(wù)運行完全不依賴UI,即使Activity被銷毀/程序被關(guān)閉,只要進程還在,后臺任務(wù)就可以繼續(xù)運行。

二者的異同。

????? Service:

??? ? ? ? 作用:執(zhí)行異步操作。

????????? 運行線程:主線程(不能處理耗時操作,否則會出現(xiàn)ANR)

????????? 運行范圍:完全不依賴UI/Activity,只要進程還在,Service就可以繼續(xù)運行

?????????????????????????? 所有Activity都可與Service關(guān)聯(lián),獲得Binder實例&操作其中的方法。

?????????????????????????? 若需處理耗時操作,則在Service里創(chuàng)建Therad子線程執(zhí)行。

??? Thread:

????????? 作用:執(zhí)行異步操作。

????????? 運行線程:工作線程。

????????? 運行范圍:即依賴于某個Activity

??????????????????????????? 在一個Activity中創(chuàng)建的子線程,另一個Activity無法對其進行操作。

?????????????????????????? 在Activity很難控制Thread

?????????????????????????? 當(dāng)Activity被銷毀后,就無法在獲取到之前創(chuàng)建的子線程實例。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容