1. 程式人生 > >AndroidManifest清單檔案詳解(Service)

AndroidManifest清單檔案詳解(Service)

語法(SYNTAX):

<serviceandroid: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):

這個元素用於宣告一個服務(Service類的子類)作為應用程式的元件之一。跟Activity不一樣,服務沒有可見的使用者介面。它們被用於實現長時的後臺操作,或提供能夠被其他應用程式呼叫的通訊API。

所有的服務都必須用清單檔案中的<service>元素來代表。任何沒有在清單中宣告的服務都不能被系統看到,也不會被執行。

屬性(ATTRIBUTES):

android:enabled

這個屬性用於指示該服務是否能夠被例項化。如果設定為true,則能夠被例項化,否則不能被例項化。預設值是true。

<application>元素有它自己的enabled屬性,它的這個屬性適用於應用中所有的元件,包括service元件。對於被啟用的服務,<application>和<service>元素的enabled屬性都必須是true(預設值都是true)。如果有一個元素的enabled屬性被設定為false,該服務就會被禁用,而不能被例項化。

android:exported

這個屬性用於指示該服務是否能夠被其他應用程式元件呼叫或跟它互動。如果設定為true,則能夠被呼叫或互動,否則不能。設定為false時,只有同一個應用程式的元件或帶有相同使用者ID的應用程式才能啟動或繫結該服務。

它的預設值依賴與該服務所包含的過濾器。沒有過濾器則意味著該服務只能通過指定明確的類名來呼叫,這樣就是說該服務只能在應用程式的內部使用(因為其他外部使用者不會知道該服務的類名),因此這種情況下,這個屬性的預設值是false。另一方面,如果至少包含了一個過濾器,則意味著該服務可以給外部的其他應用提供服務,因此預設值是true。

這個屬性不是限制把服務暴露給其他應用程式的唯一方法。還可以使用許可權來限制能夠跟該服務互動的外部實體。

android:icon

這個屬性定義了一個代表服務的圖示,它必須要引用一個包含圖片定義的可繪製資源。如果這個屬性沒有設定,則會使用<application>元素的icon屬性所設定的圖示來代替。

無論是<application>元素設定的圖示,還是<service>元素所設定的圖示,它們都是該服務所有的Intent過濾器的預設圖示。

android:label

這個屬性用於設定一個要顯示給使用者的服務的名稱。如果沒有設定這個屬性,則會使用<application>元素的label屬性值來代替。

無論是<service>設定的標籤,還是<application>元素設定的標籤,它們都是該服務所有的Intent過濾器的預設標籤。

這個標籤應用引用一個字串資源,以便它能夠像使用者介面中的字串一樣能夠被本地化。但是,為了開發應用程式方便,也可以使用原生字串來設定這個屬性。

android:name

這個屬性用於指定實現該服務的Service子類的類名。它應該是完整的Java類名(如:com.example.project.RoomService)。但是,也可以使用簡寫(如:.RoomService),系統會把<manifest>元素中package屬性所設定的值新增到簡寫名稱的前面。

一旦釋出了應用程式,就不應該改變這個名稱(除非android:exported=”false”)。

這個屬性沒有預設值,名稱必須要指定。

android:permission

這個屬性定義了要啟動或繫結服務的實體必須要有的許可權。如果呼叫者的startService()、bindService()和stopService()方法沒有被授予這個許可權,那麼這些方法就不會工作,並且Intent物件也不會發送給改服務。

如果這個屬性沒被設定,那麼通過<appliction>元素的permission屬性所設定的許可權就會適用於該服務。如果<application>元素也沒有設定許可權,則該服務不受許可權保護。

android:process

這個屬性用於設定服務所執行的程序名稱。通常,應用程式的所有元件都執行在給應用程式建立的程序中,程序名與應用程式的包名相同。<application>元素的process屬效能夠給應用程式的所有元件設定一個不同的預設名稱。但是每個元件自己的process屬性都能夠覆蓋這個預設值,這樣允許把應用程式分離到不同的多個程序中。

如果這個屬性值用“:”開頭,則在需要的時候系統會建立一個新的,應用程式私有的程序,並且該服務也會執行在這個程序中。如果這個屬性值用小寫字母開頭,那該服務就會執行在以這個屬性值命名的全域性程序中,它提供了使其工作的許可權。這樣就允許不同的應用程式元件來共享這個程序,從而降低資源的使用。