當有一些耗費內存比較多的操作時,可以通過android:process指定一個新的進程。保證程序運行。
例如:
一個后台長期運行的service:
1 <service 2 android:name="com.example.service.xxxxxService" 3 android:exported="false" 4 android:persistent="true" 5 android:process=":remote1"> 6 <intent-filter> 7 <action android:name="com.example.service.xxxxxService" 8 android:priority = "1000"/> 9 </intent-filter> 10 </service>
android:process
定義activity運行所在的進程名稱。一般情況下,應用的所有組件都運行在為應用創建的默認的進程中,該默認進程的名稱應用包名稱一致。通過定義<application>元素的“process”屬性可以為所有組件指定一個不同的默認進程。但是任意組件都可以重寫默認進程,以便實現多進程操作。
如果該屬性指定名稱以“:”開頭,則一個新的專屬於該應用的進程將會被創建。如果該進程名以小寫字母開頭,則為該activity提供權限以讓其在一個全局的進程中運行。這樣會允許多個應用的不同組件共用一個進程,以便節省資源。
Android是支持多進程的,每個進程的內存使用限制一般為24MB的內存,所以當完成一些很耗費內存的操作如處理高分辨率圖片時,需要單獨開一個進程來執行該操作(上面的配置可以用來實現該操作)。即便如此,開發者還是不要隨意多開進程來耗費用戶的資源。(內存限制,有16MB,24MB, 32MB,很老的機型的內存限制會是16MB,這個具體還要再搜索下資料。。)
android:process可以針對一個組件(activity,broadcast等)。
#########################################################
設置該屬性可以使得本應用程序與其它應用程序共享相同的進程,僅僅當這兩個應用程序也共享一個擁有相同簽名的UserId。
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.phone" >
與其它應用程序共享的一個Linux User Id的名字。
默認情況下,Android為每個應用程序分配一個唯一的User Id。然而,如果有多個應用程序都將該屬性設置為一個相同的值,那么它們將共享相同的Id。如果這些應用程序再被設置成運行在一個相同的進程,它們便可以彼此訪問對方的數據。