筆者在學習Android Service組件的過程當中碰到了一個問題,就是在Android應用的聲明文件Manifest.xml中有時候會對相關的服務標籤設置一個android:process=」:remote」,這個屬性有什麼做用呢?下面筆者就將本身整理的知識和你們分享。android
在Android的幫助文檔中咱們能夠了解到,通常狀況下一個服務沒有本身獨立的進程,它通常是做爲一個線程運行於它所在的應用的進程中。可是也有例外,Android聲明文件中的android:process屬性卻能夠爲任意組件包括應用指定進程,換句話說,經過在聲明文件中設置android:process屬性,咱們可讓組件(例如Activity, Service等)和應用(Application)建立並運行於咱們指定的進程中。下面是相關資料和筆者翻譯。學習
若是咱們須要讓一個服務在一個遠端進程中運行(而不是標準的它所在的apk的進程中運行),咱們能夠在聲明文件中這個服務的標籤中經過android:process屬性爲其指定一個進程。spa
注意:這裏選擇」remote」這個名字是隨意主觀的,你能用其餘名字來讓這個服務在另外的進程中運行。冒號’:’這個前綴將把這個名字附加到你的包所運行的標準進程名字的後面做爲新的進程名稱。線程
例如:一個應用的包名爲com.aoyousatuo.example, 則本例中服務將運行的新進程的名稱爲com.aoyousatuo.example:remote.(注意,若是聲明文件中的組件或者應用沒有指定這個屬性則默認應用和其組件將相應運行在以其包名命名的進程中).翻譯
android:processxml
服務所在進程的名字。一般,一個應用的全部組件都運行在系統爲這個應用所建立的默認進程中。這個默認進程是用這個應用的包名來命名的。blog
標籤的process屬性能夠設置成和全部組件都不一樣的默認值。可是這些組件能夠經過設置本身的process值來覆寫這個默認值,這樣可讓你的應用跨多進程運行。進程
若是被設置的進程名是以一個冒號開頭的,則這個新的進程對於這個應用來講是私有的,當它被須要或者這個服務須要在新進程中運行的時候,這個新進程將會被建立。若是這個進程的名字是以小寫字符開頭的,則這個服務將運行在一個以這個名字命名的全局的進程中,固然前提是它有相應的權限。這將容許在不一樣應用中的各類組件能夠共享一個進程,從而減小資源的佔用。資源
例如一個應用運行在進程com.aoyousatuo.example中,android:process屬性設置爲com.rabbit.run,則新的進程名字爲com.rabbit.run.rem