★精品文档★
占用物理内存越多
一旦一个进程被选中,内核会发送SIGKILL信号将之杀死:
代码如下:
for_each_process(p) { …… if(selected
==
NULL
||
p-oomkilladj
selected-oomkilladj ||
(p-oomkilladj == selected-oomkilladj && tasksize selected_tasksize)) {
selected = p; } }
if(selected != NULL) { force_sig(SIGKILL, selected); }
代码如下:
查看LRU列表:adb shell dumpsys activity
当activitydemo在前台时:
2016全新精品资料-全新公文范文-全程指导写作 –独家原创
16 / 18
★精品文档★
包含Service的进程的优先级比较高,在computeOomAdjLocked中将其分为了两小类:
代码如下:
static final int MAX_SERVICE_INACTIVITY =
30*60*1000; if
(now
<
(s.lastActivity+MAX_SERVICE_INACTIVITY)) { if (adj SECONDARY_SERVER_ADJ) { adj = SECONDARY_SERVER_ADJ;
app.adjType = “started-services”; app.hidden = false; } }
if (adj SECONDARY_SERVER_ADJ) { app.adjType = “started-bg-services”; }
代码如下:
完全让进程不被kill是不可能的,我们可以通过一些操作,使进程被kill的几率变小:
提高进程的优先级:
2016全新精品资料-全新公文范文-全程指导写作 –独家原创
17 / 18
★精品文档★
* 后台操作采用运行于前台的Service形式,因为一个运行着service的进程比一个运行着后台activity的等级高; * 按back键使得进程中的activity在后台运行而不是destory,需重载back按键(没有任何activity在运行的进程优先被杀).
* 依赖于其他优先级高的进程; 强制修改进程属性:
* 在进程中设置:setPersistent(true); * 在Manifest文件中设置(如上)。
2016全新精品资料-全新公文范文-全程指导写作 18 / 18
–独家原创