安防相關應用程序需要在後臺跑,通過socket監聽事件。由於內存不足時,application有可能會被kill掉,導致不能監聽事件。解決辦法就是讓該應用常駐系統,不被kill掉。
增加以下兩個屬性
1.必須有系統權限,即有sharedUserId="android.uid.system"屬性
2.必須有android:persistent="true"屬性,也就該進程常駐系統,永遠不會被殺掉。
普通的app,即沒有增加sharedUserId="android.uid.system"屬性這些,
在系統默認啓動後,我們看到可能就是u0_a10,新增用戶下,啓動後看到的就是u10_a10。
而通過api啓動的system server進程有兩情況,一種就是類似init.rc的方式,只有一個進程;另外一種也會兩個進程。
只有一個進程的是由什麼決定的呢?有兩個方面的因素:
1.必須有系統權限,即有sharedUserId="android.uid.system"屬性
2.必須有android:persistent="true"屬性,也就該進程常駐系統,永遠不會被殺掉。
當具備上面兩個屬性時,即使在多用戶下,啓動帶該屬性的app,也只會有一個進程,該進程的用戶爲system。
Android系統可能認爲,但是app常駐,同時又是系統進程,該app可能行爲就和system server相同。
對這樣的app,如果我們kill掉其進程,也會導致android重啓,如同去殺掉了system server進程一樣。
而在多用戶下,帶有system權限的app,如何啓動在不同的進程呢?
其實只要app不具備android:persistent="true",就可達到該目的。
這樣的app在啓動後,在默認用戶下,我們看到的進程用戶爲 system,但是在其他用戶下,可能看到的用戶就爲u10_system。
參考http://blog.csdn.net/chb2000/article/details/9421205