Android 9 AMS修改curAdj值,降低客户对讲app在后台被杀的概率

— a/alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/alps/frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -24642,6 +24642,37 @@ public class ActivityManagerService extends IActivityManager.Stub
int changes = 0;

     if (app.curAdj != app.setAdj) {
  •        String[] packages = app.getPackageList();
    
  •        if (packages != null) {
    
  •            for (String p : packages){
    
  •                if(p.equals("com.fleetclient") ||
    
  •                        p.equals("com.corget") ||
    
  •                        p.equals("com.shli.interphone") ||
    
  •                        p.equals("com.zeroonemore.rtv") ||
    
  •                        p.equals("com.zed3.sipua") ||
    
  •                        p.equals("com.loudtalks") ||
    
  •                        p.equals("net.loudtalks") ||
    
  •                        p.equals("com.tassta.flex") ||
    
  •                        p.equals("com.safemobile.linxupdater") ||
    
  •                        p.equals("com.easytalk") ||
    
  •                        p.equals("com.teamtalk") ||
    
  •                        p.equals("com.zain_ptt") ||
    
  •                        p.equals("com.mcptt") ||
    
  •                        p.equals("com.talkip") ||
    
  •                        p.equals("com.kirisun.app.p2t") ||
    
  •                        p.equals("com.azetti.ptt") ||
    
  •                        p.equals("com.goptt.ptt") ||
    
  •                        p.equals("com.tigoptt.ptt") ||
    
  •                        p.equals("com.azetti.tigohn") ||
    
  •                        p.equals("com.azetti.tigoune") ||
    
  •                        p.equals("aacnet.eu.Broadnet") ||
    
  •                        p.equals("ro.ui.pttdroid.Main") ||
    
  •                        p.equals("com.cellstar.ptt")){
    
  •                    app.curAdj = -1;
    
  •                    break;
    
  •                }
    
  •            }
    
  •        }
           ProcessList.setOomAdj(app.pid, app.uid, app.curAdj);
           if (DEBUG_SWITCH || DEBUG_OOM_ADJ || mCurOomAdjUid == app.info.uid) {
               String msg = "Set " + app.pid + " " + app.processName + " adj "
    
<think>我们正在讨论Android系统中设置AMS(ActivityManagerService)后台最大进程数的问题。根据用户的问题,我们需要了解如何调整AMS后台进程限制。在Android系统中,ActivityManagerService负责管理进程和任务。其中,有一个参数用于控制后台允许的最大进程数量。这个参数通常是在系统构建时定义的,但有时可以通过系统属性或配置文件进行调整。在Android源代码中,后台进程的最大数量由`MAX_CACHED_PROCESSES`常量控制,这个常量定义在`ActivityManagerConstants.java`文件中。然而,这个通常是根据设备的内存大小动态计算的,但也会有一个上限,这个上限就是我们要关注的。实际上,在系统运行时,我们可以通过修改`sysprop`(系统属性)来调整这个。具体来说,可以通过设置`persist.sys.max_cached_processes`属性来改变后台最大进程数。步骤如下:1.获取当前的后台最大进程数设置:```shelladbshellgetproppersist.sys.max_cached_processes```2.设置新的后台最大进程数(例如,设置为32):```shelladbshellsetproppersist.sys.max_cached_processes32```3.为了使设置永久生效(在重启后仍然有效),需要将属性设置为`persist`类型(如上所示,使用`persist.`前缀),这样属性会保存在`/data/property`目录下。注意:这个属性需要系统权限(通常是root权限)才能设置,因为这是系统级别的设置。另外,也可以通过修改系统配置文件(例如在`/system/build.prop`中添加或修改属性)来实现永久更改,但同样需要root权限,并且需要重新启动设备。在代码层面,如果我们有系统级应用的权限,可以使用如下代码设置属性:```javaSystemProperties.set("persist.sys.max_cached_processes","32");```但是,请注意,修改系统属性可能会影响系统稳定性,因此需要谨慎操作。另外,在Android的不同版本中,管理后台进程的方式可能有所不同,特别是在较新的版本中,Google对后台进程的限制越来越严格,所以这个方法可能不适用于所有版本。在Android8.0(Oreo)之后,后台进程的管理更加严格,可能还受到其他限制(如后台执行限制、电池优化等)的影响。因此,在设置这个之前,请确保了解设备运行的Android版本以及该版本的后台进程管理机制。引用说明:以上信息基于对Android系统管理的常规理解,具体实现可能因设备制造商和Android版本而异。[^1]§§相关问题§§1.如何查看Android设备当前的后台进程限制?2.修改AMS后台最大进程数需要什么权限?3.在Android高版本(如Android10以上)中,后台进程管理有哪些变化?4.除了设置最大进程数,还有哪些方法可以优化Android后台进程管理?</think>### 在 Android 中设置 AMS 后台最大进程数 在 Android 系统中,Activity Manager Service (AMS) 负责管理进程生命周期。调整后台最大进程数可通过以下两种方式实现: #### 1. **修改系统配置文件 (需 root 权限)** 在设备文件系统中修改 `build.prop` 文件: ```shell adb root adb remount adb pull /system/build.prop ``` 在 `build.prop` 末尾添加: ```properties # 设置后台最大进程数为 32 sys.ams.max_cached_processes=32 ``` 保存后推送回设备: ```shell adb push build.prop /system/ adb reboot ``` #### 2. **通过系统属性动态设置 (需系统权限)** 在具有系统权限的 Java 代码中: ```java import android.os.SystemProperties; // 设置后台最大进程数 SystemProperties.set("sys.ams.max_cached_processes", "32"); // 强制AMS重新加载配置 ActivityManagerService.self().updateMaxCachedProcesses(); ``` #### 关键说明: 1. **权限要求** 两种方式均需 `android:sharedUserId="android.uid.system"` 或 root 权限 2. **默认机制** Android 默认基于设备 RAM 动态计算最大: $$ \text{MAX\_CACHED\_PROCESSES} = \text{min}(16, \frac{\text{RAM\_GB} \times 1.5}{2}) $$ 例如 4GB RAM 设备默认上限为 16 个进程 3. **版本差异** - Android 7.0+ 使用 `max_cached_processes` - 旧版本使用 `MAX_CACHED_APPS`(已废弃) > **注意**:过度增加进程数可能导致内存压力增加和系统卡顿,建议不超过设备 RAM(GB)×2 的数[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值