Android进程管理:Framework层概念( 四 )

彩蛋:反保活的终结者
Android 中的进程查杀最强武器是force-stop,本质上它会通过遍历并杀死所有和应用有关的Java进程:
private final boolean killPackageProcessesLocked(String packageName, int appId,        int userId, int minOomAdj, boolean callerWillRestart, boolean allowRestart, boolean doit, boolean evenPersistent, String reason) {    ArrayList<ProcessRecord> procs = new ArrayList<>();    final int NP = mProcessNames.getMap().size();    for (int ip=0; ip<NP; ip++) {        SparseArray<ProcessRecord> apps = mProcessNames.getMap().valueAt(ip);        final int NA = apps.size();        for (int ia=0; ia<NA; ia++) {            ProcessRecord app = apps.valueAt(ia);            ...            // continue if the process do not need to kill            app.removed = true;            procs.add(app);        }    }    int N = procs.size();    // force-stop 的本质是通过遍历所有与应用有关的进程,依次查杀来实现杀死所有进程的    for (int i=0; i<N; i++) {        removeProcessLocked(procs.get(i), callerWillRestart, allowRestart, reason);    }    updateOomAdjLocked();    return N > 0;}想要做反保活的话,我们只需要在 removeProcessLocked 的遍历之前,将 java 进程和在其同一cgroup的c进程一起通过发送信号hang住,再通过循环依次杀死所有进程,这种方法基本能杜绝所有拉活方案 。
总结进程管理与大家日常开发息息相关,也是在Android系统中是个举足轻重的模块 。相信通过本系列的两篇文章,大家已经对进程启动期间涉及到fork、对进程的优先级管理涉及到adj、对进程的调度这些概念已经有了更加深入的理解了 。

【Android进程管理:Framework层概念】


推荐阅读