應用程序常駐系統

安防相關應用程序需要在後臺跑,通過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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章