語法(SYNTAX):
<service
android:enabled=["true" | "false"]
android:exported["true" | "false"]
android:icon="drawable resource"
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string">
</service>
被包含于(CONTAINED IN):
<application>
可能包含的元素(CAN CONTAIN):
<intent-filter>
<meta-data>
說明(DESCRIPTION):
這個(gè)元素用于聲明一個(gè)服務(wù)(Service類的子類)作為應(yīng)用程序的組件之一戒良。跟Activity不一樣,服務(wù)沒有可見的用戶界面诚隙。它們被用于實(shí)現(xiàn)長時(shí)的后臺(tái)操作忘分,或提供能夠被其他應(yīng)用程序調(diào)用的通信API。
所有的服務(wù)都必須用清單文件中的<service>元素來代表员魏。任何沒有在清單中聲明的服務(wù)都不能被系統(tǒng)看到誓沸,也不會(huì)被運(yùn)行诸迟。
屬性(ATTRIBUTES):
android:enabled
這個(gè)屬性用于指示該服務(wù)是否能夠被實(shí)例化否副。如果設(shè)置為true汉矿,則能夠被實(shí)例化,否則不能被實(shí)例化备禀。默認(rèn)值是true洲拇。
<application>元素有它自己的enabled屬性,它的這個(gè)屬性適用于應(yīng)用中所有的組件曲尸,包括service組件赋续。對(duì)于被啟用的服務(wù),<application>和<service>元素的enabled屬性都必須是true(默認(rèn)值都是true)另患。如果有一個(gè)元素的enabled屬性被設(shè)置為false纽乱,該服務(wù)就會(huì)被禁用,而不能被實(shí)例化柴淘。
android:exported
這個(gè)屬性用于指示該服務(wù)是否能夠被其他應(yīng)用程序組件調(diào)用或跟它交互迫淹。如果設(shè)置為true,則能夠被調(diào)用或交互为严,否則不能敛熬。設(shè)置為false時(shí),只有同一個(gè)應(yīng)用程序的組件或帶有相同用戶ID的應(yīng)用程序才能啟動(dòng)或綁定該服務(wù)第股。
它的默認(rèn)值依賴與該服務(wù)所包含的過濾器应民。沒有過濾器則意味著該服務(wù)只能通過指定明確的類名來調(diào)用,這樣就是說該服務(wù)只能在應(yīng)用程序的內(nèi)部使用(因?yàn)槠渌獠渴褂谜卟粫?huì)知道該服務(wù)的類名)夕吻,因此這種情況下诲锹,這個(gè)屬性的默認(rèn)值是false。另一方面涉馅,如果至少包含了一個(gè)過濾器归园,則意味著該服務(wù)可以給外部的其他應(yīng)用提供服務(wù),因此默認(rèn)值是true稚矿。
這個(gè)屬性不是限制把服務(wù)暴露給其他應(yīng)用程序的唯一方法庸诱。還可以使用權(quán)限來限制能夠跟該服務(wù)交互的外部實(shí)體。
android:icon
這個(gè)屬性定義了一個(gè)代表服務(wù)的圖標(biāo)晤揣,它必須要引用一個(gè)包含圖片定義的可繪制資源桥爽。如果這個(gè)屬性沒有設(shè)置,則會(huì)使用<application>元素的icon屬性所設(shè)定的圖標(biāo)來代替昧识。
無論是<application>元素設(shè)置的圖標(biāo)钠四,還是<service>元素所設(shè)置的圖標(biāo),它們都是該服務(wù)所有的Intent過濾器的默認(rèn)圖標(biāo)跪楞。
android:label
這個(gè)屬性用于設(shè)定一個(gè)要顯示給用戶的服務(wù)的名稱缀去。如果沒有設(shè)置這個(gè)屬性,則會(huì)使用<application>元素的label屬性值來代替甸祭。
無論是<service>設(shè)定的標(biāo)簽朵耕,還是<application>元素設(shè)定的標(biāo)簽,它們都是該服務(wù)所有的Intent過濾器的默認(rèn)標(biāo)簽淋叶。
這個(gè)標(biāo)簽應(yīng)用引用一個(gè)字符串資源阎曹,以便它能夠像用戶界面中的字符串一樣能夠被本地化。但是煞檩,為了開發(fā)應(yīng)用程序方便处嫌,也可以使用原生字符串來設(shè)置這個(gè)屬性。
android:name
這個(gè)屬性用于指定實(shí)現(xiàn)該服務(wù)的Service子類的類名斟湃。它應(yīng)該是完整的Java類名(如:com.example.project.RoomService)熏迹。但是凝赛,也可以使用簡寫(如:.RoomService)注暗,系統(tǒng)會(huì)把<manifest>元素中package屬性所設(shè)定的值添加到簡寫名稱的前面。
一旦發(fā)布了應(yīng)用程序捆昏,就不應(yīng)該改變這個(gè)名稱(除非android:exported=”false”)。
這個(gè)屬性沒有默認(rèn)值骗卜,名稱必須要指定宠页。
android:permission
這個(gè)屬性定義了要啟動(dòng)或綁定服務(wù)的實(shí)體必須要有的權(quán)限。如果調(diào)用者的startService()寇仓、bindService()和stopService()方法沒有被授予這個(gè)權(quán)限举户,那么這些方法就不會(huì)工作遍烦,并且Intent對(duì)象也不會(huì)發(fā)送給改服務(wù)。
如果這個(gè)屬性沒被設(shè)置服猪,那么通過<appliction>元素的permission屬性所設(shè)定的權(quán)限就會(huì)適用于該服務(wù)兄淫。如果<application>元素也沒有設(shè)置權(quán)限,則該服務(wù)不受權(quán)限保護(hù)蔓姚。
android:process
這個(gè)屬性用于設(shè)定服務(wù)所運(yùn)行的進(jìn)程名稱捕虽。通常,應(yīng)用程序的所有組件都運(yùn)行在給應(yīng)用程序創(chuàng)建的進(jìn)程中泄私,進(jìn)程名與應(yīng)用程序的包名相同。<application>元素的process屬性能夠給應(yīng)用程序的所有組件設(shè)置一個(gè)不同的默認(rèn)名稱晌端。但是每個(gè)組件自己的process屬性都能夠覆蓋這個(gè)默認(rèn)值,這樣允許把應(yīng)用程序分離到不同的多個(gè)進(jìn)程中咧纠。
如果這個(gè)屬性值用“:”開頭,則在需要的時(shí)候系統(tǒng)會(huì)創(chuàng)建一個(gè)新的漆羔,應(yīng)用程序私有的進(jìn)程,并且該服務(wù)也會(huì)運(yùn)行在這個(gè)進(jìn)程中演痒。如果這個(gè)屬性值用小寫字母開頭,那該服務(wù)就會(huì)運(yùn)行在以這個(gè)屬性值命名的全局進(jìn)程中趋惨,它提供了使其工作的權(quán)限。這樣就允許不同的應(yīng)用程序組件來共享這個(gè)進(jìn)程器虾,從而降低資源的使用蹦锋。
被引入的版本(INTRODUCED IN):
API Level 1