在做桌面產(chǎn)品的時候,發(fā)現(xiàn)一些機型存在將桌面默認后重啟手機出現(xiàn)卡死的情況扣墩,通過查看log哲银,出現(xiàn)錯誤信息在手機系統(tǒng)啟動加載完androidmanifest.xml,開始進行contentproveder的加載注冊處理時發(fā)生呻惕。查看相關部分的功能處理代碼無果后荆责,將關注點放在了androidmanifest.xml中的權限聲明中。
application的屬性 android:persistent亚脆,如果將android:persistent=“true"做院,其目的是為了希望程序常駐內(nèi)存,但前提是程序必須為系統(tǒng)程序,即其安裝目錄為/system/apk/目錄下才會有效键耕。這樣的程序需要重啟手機后才會起效寺滚。正常的程序安裝后路徑為 /data/apk/目錄下,因此即使設置了該屬性也不會有效果屈雄。
一些手機村视,特別實三星的部分手機會根據(jù)這個權限的設置去做檢查,使得contentprovider在加載與關聯(lián)時棚亩,認為其不具備系統(tǒng)級的權限使得contentprovider不斷的重復循環(huán)執(zhí)行,因此導致程序運行失敗讥蟆。
使用android:persistent時慎重使用。如不是系統(tǒng)級別的應用瘸彤,不推薦使用。
persistent屬性介紹
系統(tǒng)應用開發(fā)中愕宋,一些特殊的應用需要加上 persistent 屬性來保證應用的持久性结榄,提高應用的存活。persistent 是用于控制應用程序特殊持久模式的標志臼朗。通常情況下不應被應用程序使用,要求系統(tǒng)始終保持應用程序的運行绣否。persistent 為true時則當應用被強制殺掉后挡毅,應用會進行重啟,當然如果應用奔潰也會導致一系列問題段磨。
persistent 屬性用法如下:
<application
android:name=".MainApplication"
android:allowBackup="true"
android:icon="@mipmap/settings_launcher_ic"
android:label="@string/app_name"
android:persistent="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
...
persistent應用不建議用于安裝庆械,如果已經(jīng)安裝了應用,則需要卸載后再安裝沐序,或者push到系統(tǒng)app目錄下琉用。
由于persistent應用在啟動時 AM S會對系統(tǒng)system應用的 Manifest 進行緩存邑时,因此在push應用后特姐,Manifest 依舊為原來的配置,需要對此目錄中對應的應用緩存刪除浅浮,Android 9的目錄為:
/data/system/package_cache/1
或者刪除原有 /system/priv-app/ 下的應用捷枯,再install apk安裝,每次安裝apk時會生成新的安裝應用的緩存淮捆。
如果不想刪除緩存,也可以修改版本號編譯新apk放入系統(tǒng)目錄下桐腌。