酷安APP 发现科技新生活

朝比奈玖玖瑠

2023-11-07 小米MIX Fold3

​微信内存优化攻略 ~可能是目前最有效的保留消息通知同时减少内存占用的设置~
先叠个甲,我的设备是miui14官方rom。理论上本教程适用于任何设备,但也可能在其他设备上存在莫名其妙的bug,请自行解决

图1 优化后效果,微信保持2个进程2个服务,内存占用在500m以下

第一步 在系统里把微信的自启动/后台/电池优化白名单这类设置都打开,避免由于系统的后台清理导致微信停止运行。

第二步,打开乖巧模式,打开微信开关。点击右上角的省略号选择设置,如图2勾选。再打开右上角选择规则,点加号输入以下2条规则如图3。
KEEP com.tencent.mm/com.tencent.mm.service.ProcessService$MMProcessService
KEEP com.tencent.mm/com.tencent.mm.booter.CoreService

第三步,打开情景模式,打开右上角-引擎-su api支持,然后分别复制以下两条规则。

[
{
"name": "微信划掉任务时杀死后台并重启",
"description": "保留通知进程",
"priority": -2,
"condition": "taskRemoved == true && pkgName == \"com.tencent.mm\"",
"delay": 1000,
"actions": [
"killer.killPackage(\"com.tencent.mm\")",
"Thread.sleep(2000)",
"su.exe(\"am startservice -n com.tencent.mm/com.tencent.mm.booter.CoreService\")",
"su.exe(\"am startservice -n com.tencent.mm/com.tencent.mm.service.ProcessService$MMProcessService\")"
]}
]

[
{
"name": "微信后台或关屏2分钟时关闭多余进程",
"description": "延时触发后检测如果微信不在前台或已锁屏,先尝试重启再关闭通知进程以外的进程",
"priority": -3,
"condition": "frontPkgChanged == true && from == \"com.tencent.mm\" || screenOff == true",
"delay": 120000,
"actions": ["if (thanos.activityManager.currentFrontApp != \"com.tencent.mm\" || !context.getSystemService(context.POWER_SERVICE).isScreenOn()) {su.exe(\"am startservice -n com.tencent.mm/com.tencent.mm.booter.CoreService\");su.exe(\"am startservice -n com.tencent.mm/com.tencent.mm.service.ProcessService$MMProcessService\");Thread.sleep(2000);su.exe(\"ps -ef|grep com.tencent.mm:|grep -v :push|grep -v grep|awk '{print $2}'|xargs kill -9\");}"
]
}
]

开启规则如图4,完成。
第一条规则的作用是在微信从最近任务划掉或按清理后台按钮之后,重启微信以释放进程缓存占用的内存。然后重启微信的push服务,push核心服务会拉起另一个进程,实现图1效果。
第二条规则的作用是在微信切到后台或者锁屏两分钟后,通过命令关闭两个通知进程以外的其他进程。不会释放这两个进程的内存,也不会关闭进程内的服务,此时效果如图5,是双进程加4-6个服务。内存占用会比第一条规则执行后要多。delay后的数字为你希望延时清理的毫秒数。

以下是设置的说明
经过我的测试,只开启乖巧模式没有办法在微信切到后台后关闭进程。乖巧模式的作用是阻止微信重启后主进程拉起其他与消息通知无关的进程。

原先我也是复制的其他通过命令关闭除2个通知以外进程的脚本。但发现关闭其余进程后,这两个通知进程仍然会占用较大的内存,并且其内部会运行一些与消息通知无关的服务(也就是图5的状态)。把这两个进程也干掉,内存才会被释放。这时再通过命令启动与消息通知相关的服务,就可以最大限度的减少内存占用。

关于保活: 理论上关闭了系统级别的后台清理后,微信的这两个消息通知进程就不会被停止。因此不需要保活。这个从评论区其他酷友处复制的保活脚本有一个问题,那就是里面是通过thanox API启动微信package的。而启动后有时微信会属于缓存进程状态,内部并没有运行任何与通知有关的服务,这时还是收不到消息。

Thanox