• 通过修改源码解决低内存杀死自己app的解决方案


    通过修改源码解决低内存杀死自己app的解决方案:
    修改源码路径:frameworks\base\services\core\java\com\android\server\am\ActivityManagerService.java

    private final int computeOomAdjLocked(ProcessRecord app, int cachedAdj, ProcessRecord TOP_APP, boolean doingAll, long now)

    在 computeOomAdjLocked 添加下面代码。红色代码为添加代码

    // Examine all activities if not already foreground.
            if (!foregroundActivities && activitiesSize > 0) {
                int minLayer = ProcessList.VISIBLE_APP_LAYER_MAX;
                for (int j = 0; j < activitiesSize; j++) {
                    final ActivityRecord r = app.activities.get(j);
                    if (r.app != app) {
                        Log.e(TAG, "Found activity " + r + " in proc activity list using " + r.app
                                + " instead of expected " + app);
                        if (r.app == null || (r.app.uid == app.uid)) {
                            // Only fix things up when they look sane
                            r.app = app;
                        } else {
                            continue;
                        }
                    }
                    if (r.visible) {
                        // App has a visible activity; only upgrade adjustment.
                        if (adj > ProcessList.VISIBLE_APP_ADJ) {
                            adj = ProcessList.VISIBLE_APP_ADJ;
                            app.adjType = "visible";
                        }
                        if (procState > PROCESS_STATE_CUR_TOP) {
                            procState = PROCESS_STATE_CUR_TOP;
                        }
                        schedGroup = ProcessList.SCHED_GROUP_DEFAULT;
                        app.cached = false;
                        app.empty = false;
                        foregroundActivities = true;
                        if (r.task != null && minLayer > 0) {
                            final int layer = r.task.mLayerRank;
                            if (layer >= 0 && minLayer > layer) {
                                minLayer = layer;
                            }
                        }
                        break;
                    } else if (r.state == ActivityState.PAUSING || r.state == ActivityState.PAUSED) {
                        if (adj > ProcessList.PERCEPTIBLE_APP_ADJ) {
                            adj = ProcessList.PERCEPTIBLE_APP_ADJ;
                            app.adjType = "pausing";
                        }
                        if (procState > PROCESS_STATE_CUR_TOP) {
                            procState = PROCESS_STATE_CUR_TOP;
                        }
                        schedGroup = ProcessList.SCHED_GROUP_DEFAULT;
                        app.cached = false;
                        app.empty = false;
                        foregroundActivities = true;
                    } else if (r.state == ActivityState.STOPPING) {
                        if (adj > ProcessList.PERCEPTIBLE_APP_ADJ) {
                            adj = ProcessList.PERCEPTIBLE_APP_ADJ;
                            app.adjType = "stopping";
                        }
                        // For the process state, we will at this point consider the
                        // process to be cached.  It will be cached either as an activity
                        // or empty depending on whether the activity is finishing.  We do
                        // this so that we can treat the process as cached for purposes of
                        // memory trimming (determing current memory level, trim command to
                        // send to process) since there can be an arbitrary number of stopping
                        // processes and they should soon all go into the cached state.
                        if (!r.finishing) {
                            if (procState > ActivityManager.PROCESS_STATE_LAST_ACTIVITY) {
                                procState = ActivityManager.PROCESS_STATE_LAST_ACTIVITY;
                            }
                        }
                        app.cached = false;
                        app.empty = false;
                        foregroundActivities = true;
                    } else {
                        if (procState > ActivityManager.PROCESS_STATE_CACHED_ACTIVITY) {
                            procState = ActivityManager.PROCESS_STATE_CACHED_ACTIVITY;
                            app.adjType = "cch-act";
                        }
                    }
                }
                if (adj == ProcessList.VISIBLE_APP_ADJ) {
                    adj += minLayer;
                }
            }


     if(app.processName.equals("不想被杀死的app的包名")){
           adj = ProcessList.VISIBLE_APP_ADJ;
     }

    以上为添加的源码 

    if (adj > ProcessList.PERCEPTIBLE_APP_ADJ
                    || procState > ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) {
                if (app.foregroundServices) {
                    // The user is aware of this app, so make it visible.
                    adj = ProcessList.PERCEPTIBLE_APP_ADJ;
                    procState = ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
                    app.cached = false;
                    app.adjType = "fg-service";
                    schedGroup = ProcessList.SCHED_GROUP_DEFAULT;
                } else if (app.forcingToForeground != null) {
                    // The user is aware of this app, so make it visible.
                    adj = ProcessList.PERCEPTIBLE_APP_ADJ;
                    procState = ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND;
                    app.cached = false;
                    app.adjType = "force-fg";
                    app.adjSource = app.forcingToForeground;
                    schedGroup = ProcessList.SCHED_GROUP_DEFAULT;
                }
            }

  • 相关阅读:
    Java高级技术探索:深入理解JVM内存分区与GC机制
    【SpringMVC】执行流程
    学习笔记-MongoDB(复制集,分片集集群搭建)
    VR,向「B」而生
    【无人机】基于蚁群算法的无人机航路规划研究附matlab代码
    微信小程序canvas画布绘制base64图片并保存图片到相册中
    互联网时代下服务器该如何进行主机加固
    基于Spring Boot的智能分析平台
    蜂鸟E203学习笔记(二)--蜂鸟E203总体框架
    三维图形程序员必学-CGAL几何算法
  • 原文地址:https://blog.csdn.net/m0_37039192/article/details/110371573