android:persistent属性

在做桌面产品的时候,发现一些机型存在将桌面默认后重启手机出现卡死的情况,通过查看log,出现错误信息在手机系统启动加载完androidmanifest.xml,开始进行contentproveder的加载注册处理时发生。查看相关部分的功能处理代码无果后,将关注点放在了androidmanifest.xml中的权限声明中。

application的属性 android:persistent,如果将android:persistent=“true",其目的是为了希望程序常驻内存,但前提是程序必须为系统程序,即其安装目录为/system/apk/目录下才会有效。这样的程序需要重启手机后才会起效。正常的程序安装后路径为 /data/apk/目录下,因此即使设置了该属性也不会有效果。

一些手机,特别实三星的部分手机会根据这个权限的设置去做检查,使得contentprovider在加载与关联时,认为其不具备系统级的权限使得contentprovider不断的重复循环执行,因此导致程序运行失败。

使用android:persistent时慎重使用。如不是系统级别的应用,不推荐使用。

persistent属性介绍
系统应用开发中,一些特殊的应用需要加上 persistent 属性来保证应用的持久性,提高应用的存活。persistent 是用于控制应用程序特殊持久模式的标志。通常情况下不应被应用程序使用,要求系统始终保持应用程序的运行。persistent 为true时则当应用被强制杀掉后,应用会进行重启,当然如果应用奔溃也会导致一系列问题。
persistent 属性用法如下:

    
        

persistent应用不建议用于安装,如果已经安装了应用,则需要卸载后再安装,或者push到系统app目录下。
由于persistent应用在启动时 AM S会对系统system应用的 Manifest 进行缓存,因此在push应用后,Manifest 依旧为原来的配置,需要对此目录中对应的应用缓存删除,Android 9的目录为:
/data/system/package_cache/1

或者删除原有 /system/priv-app/ 下的应用,再install apk安装,每次安装apk时会生成新的安装应用的缓存。
如果不想删除缓存,也可以修改版本号编译新apk放入系统目录下。

你可能感兴趣的:(android:persistent属性)