ANDROID使程序进程不被LMK杀死
来源:互联网 发布:mac 识别usb2.0 编辑:程序博客网 时间:2024/04/29 17:19
通过这两篇文章
http://topic.csdn.net/u/20110312/11/62e21a94-195b-48c8-85d3-ea2689ed693f.html?seed=582570045&r=72861243#r_72861243
http://blog.sina.com.cn/s/blog_4d66a3cb0100prfe.html
总算实现了目标。通过在androidmanifest.xml中的application标签中加入android:persistent="true" 属性后的确就能够达到保证该应用程序所在进程不会被LMK杀死。但有个前提就是应用程序必须是系统应用,也就是说应用程序不能采用通常的安装方式。必须将应用程序的apk包直接放到/system/app目录下。而且必须重启系统后才能生效。
除了一般的几种优先级外,还存在着coreserver,system这样的永远不会被LMK回收的优先级。系统中的电话应用就是coreserver优先级的。
通过查看源代码可以知道,只有应用程序的flag同时为FLAG_SYSTEM和FLAG_PERSISTENT时,才会被设置为coreserver优先级
if ((info.flags&(ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) == (ApplicationInfo.FLAG_SYSTEM|ApplicationInfo.FLAG_PERSISTENT)) {
app.persistent = true;
app.maxAdj = CORE_SERVER_ADJ;
}
FLAG_SYSTEM在应用程序apk放在/system/app下时会被设置。所以才会出现只设置android:persistent="true"仍然会被杀死的情况。
测试时发现,将应用程序放到/system/app后不重启系统,仍然会被识别为普通的进程。当系统重新启动时,会在一开始就启动该进程并把它优先级设置为coreserver。
通过dumpsys activity命令能够很明显的看出其中差别。
Running processes (most recent first):
App # 3: adj= 2/1 ProcessRecord{30858c20 1877:com.android.email/10014} (started-services)
PERS # 2: adj=-100/0 ProcessRecord{308fb390 1713:system/1000} (fixed)
App # 1: adj= 0/0 ProcessRecord{30908198 1794:android.process.acore/10005} (top-activity)
PERS # 0: adj= -12/0 ProcessRecord{3090d488 1789:xiao.xiong.test/10026} (fixed)
而且adj=-12时,这个进程通过ddms手动stop后会立即启动
- ANDROID使程序进程不被LMK杀死
- android使程序进程不被LMK杀死| application运行环境初始化
- Android退出程序并杀死该进程
- Android结束程序杀死进程的方法
- Android退出程序并杀死该进程
- bat 程序杀死进程
- android adb 杀死进程
- android杀死进程
- Android完全杀死进程
- Android完全杀死进程
- android 杀死进程
- android杀死进程方法
- android杀死进程
- android 彻底杀死进程
- android杀死进程
- Android开发笔记——退出程序与杀死进程
- android LMK 工作机制
- 通过程序名杀死进程
- 如何使用KeyChain保存和获取UDID
- oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT
- android browser 的几个小feature (四) kitkat上实现UaProfile的设置
- Eclipse下User Library的发布 (解决启动tomcat的时候,就会报各种类找不到的错误)
- 用户态和内核态的概念区别
- ANDROID使程序进程不被LMK杀死
- iOS7 leftBarButton 和rightBarButton的位置偏差
- 微信公众平台
- 第三十九章:最近公共祖先LCA问题
- dbms_lob使用之-基础
- iOS性能优化系列
- inner join和where区别
- NYOJ 66 分数拆分
- Java中Enumeration接口的用法