android:process=":remote"屬性解說
在學習Android Service元件的過程中碰到了一個問題,就是在Android應用的宣告檔案Manifest.xml中有時候會對相關的服務標籤設定一個android:process=”:remote”,這個屬性有什麼作用呢?下面筆者就將自己整理的知識和大家分享。
在Android的幫助文件中我們可以瞭解到,一般情況下一個服務沒有自己獨立的程序,它一般是作為一個執行緒運行於它所在的應用的程序中。但是也有例外,Android宣告檔案中的android:process屬性卻可以為任意元件包括應用指定程序,換句話說,通過在宣告檔案中設定android:process屬性,我們可以讓元件(例如Activity, Service等)和應用(Application)建立並運行於我們指定的程序中。下面是相關資料和筆者翻譯。
如果我們需要讓一個服務在一個遠端程序中執行(而不是標準的它所在的apk的程序中執行),我們可以在宣告檔案中這個服務的標籤中通過android:process屬性為其指定一個程序。
注意:這裡選擇”remote”這個名字是隨意主觀的,你能用其他名字來讓這個服務在另外的程序中執行。冒號’:’這個字首將把這個名字附加到你的包所執行的標準程序名字的後面作為新的程序名稱。
例如:一個應用的包名為com.aoyousatuo.example, 則本例中服務將執行的新程序的名稱為com.aoyousatuo.example:remote.(注意,如果宣告檔案中的元件或者應用沒有指定這個屬性則預設應用和其元件將相應執行在以其包名命名的程序中).
android:process
服務所在程序的名字。通常,一個應用的所有元件都執行在系統為這個應用所建立的預設程序中。這個預設程序是用這個應用的包名來命名的。
標籤的process屬性可以設定成和所有元件都不同的預設值。但是這些元件可以通過設定自己的process值來覆寫這個預設值,這樣可以讓你的應用跨多程序執行。
如果被設定的程序名是以一個冒號開頭的,則這個新的程序對於這個應用來說是私有的,當它被需要或者這個服務需要在新程序中執行的時候,這個新程序將會被建立。如果這個程序的名字是以小寫字元開頭的,則這個服務將執行在一個以這個名字命名的全域性的程序中,當然前提是它有相應的許可權。這將允許在不同應用中的各種元件可以共享一個程序,從而減少資源的佔用。
例如一個應用執行在程序com.aoyousatuo.example中,android:process屬性設定為com.rabbit.man,則新的程序名字為com.rabbit.run.