Android Manifest之<service>元素中文註釋

語法
    <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屬性重寫默認值,從而允許你擴展你的應用跨越多個進程。

    如果分配到這個屬性的名稱以冒號(:)開始,那麼當需要它的時候,一個新的、對這個應用私有的進程就被創建,同時這個服務就在哪個進程運行。如果進程的名字以小寫字母開始,那麼這個服務將運行在全局進程中。這就允許在不同應用中的組件共享這個進程,降低資源的消耗。

 

You May Also Like