Android下写一个永远不会被KILL掉进程-服务 下载本文

★精品文档★

占用物理内存越多

一旦一个进程被选中,内核会发送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

–独家原创