文法
<service android:enabled=["true" | "false"]
android:exported=["true" |"false"]
android:icon="drawable resource"
android:isolatedProcess=["true" | "false"]
android:label="string resource"
android:name="string"
android:permission="string"
android:process="string">
. . .
</service>
父元素
<application>
子項目
<intent-filter>
<meta-data>
描述
聲明一個作為應用組件的service(Service的子類)。和activities不同的是,services缺乏可視化的使用者介面。它們用來實現長期啟動並執行後台操作或由其它應用調用的富通訊API。
所有的services都必須在manifest檔案中通過<service>元素來表示。沒有在manifest中聲明的將對系統不可見並且絕不會運行。
屬性
android:enabled
是否這個service能被系統執行個體化-如果能則為true,否則為false。預設為true。
<application>元素有它自身的能應用到所有應用組件的enabled屬性,包括services。要是這個service要enabled,那麼這個<application>和<service>屬性都必須為true(它們都是預設值)。如果有一個為false,這個服務就會disabled;它就不會被執行個體化。
android:exported
是否其它應用組件能調用這個service或同它互動-如果能則為true,否則為false。當值為false時,只有同一個應用的組件或有相同使用者ID的應用能啟動這個服務或綁定它。
預設值依賴於服務是否包含intent filters。過濾器的缺失意味著它只能通過指定它準確類名來調用它。這就意味著這個服務只能在應用內部被使用(因為其它應用不知道類名)。因此,在這種情況下,預設值是false。另一方面,至少有一個過濾器意味著這個服務可以在外部被使用,因此,預設值為true。
這個屬性並非是限制這個服務暴漏給其它服務的唯一途徑。你也能通過許可權來限制跟服務互動的外部實體(參見permisson屬性)。
android:icon
服務呈現的表徵圖。這個屬性必須被設定為包含圖片的drawable資源的引用。如果沒有設定,那麼這個application的表徵圖將代替它(參見<application>元素的icon屬性)。
對所有的intent filters來說,這個服務的表徵圖無論是自身設定的還是通過<application>設定的,都是它們的預設表徵圖(參見<intent-filter>元素的icon屬性)。
android:isolatedProcess
如果設定為true,這個服務將運行在專門的進程中,這個進程從系統的剩餘部分獨立出來,它自身沒有許可權。同它唯一的通訊方式就是通過這個Service API(binding或starting)。
android:label
這個服務給使用者顯示的名稱。如果這個屬性沒有設定,將使用<application>的label屬性代替(參見<appliation>元素的label屬性)。
這個服務的label,無論是通過自身設定的,還是通過application設定的,對於這個service的intent filters來說都是預設值(參見<intent-filter>元素的label屬性)。
這個label應當設定為string資源的引用,以便在使用者介面中能同其它string資源一樣本地化。然而,在開發應用時為了方便起見,它也能被設定為raw串。
android:name
實現這個service的Service子類名稱。這應當是完整格式的類名(例如,“com.example.project.RoomService”)。然而,作為一個簡寫,如果名稱的第一個字母是點(例如,“.RoomService”), 它會被添加到在<manifest>元素中聲明的包名後面。
一旦你發布了你的應用,你就不要修改這個名字(除非你設定了android:exported=false)。
沒有預設值,這個名稱必須被指定。
android:permission
為了啟動這個service或綁定到它一個實體必須要有的許可權的名稱。如果startService(),bindService()或stopService()的調用者還沒有擷取這個授權,那麼這些方法就不會工作,而且這個intent對象也不會傳遞到service。
如果這個屬性沒有設定,由<application>元素的permission屬性設定的許可權就會應用到這個service。如果都沒有設定,那麼這個服務就不再受許可權保護。
android:process
服務將要啟動並執行進程名稱。一般來講,應用的所有組件都運行在應用建立的預設進程中。就像應用的包名一樣。<application>元素的process屬效能對所有組件設定不同的預設值。然而,組件能通過它自身的process屬性重寫預設值,從而允許你擴充你的應用跨越多個進程。
如果分配到這個屬性的名稱以冒號(:)開始,那麼當需要它的時候,一個新的、對這個應用私人的進程就被建立,同時這個服務就在哪個進程運行。如果進程的名字以小寫字母開始,那麼這個服務將運行在全域進程中。這就允許在不同應用中的組件共用這個進程,降低資源的消耗。