酷安APP 分享美好科技生活

MIUI自带墓碑及其增强 —— MiT Lite模块

yqs112358

2023-08-06 小米11青春活力版

#墓碑模式#
从MIUI13开始,小米引进了官方的墓碑机制millet,为毒瘤应用提供了一种不错的压制手段。

相比直接杀死进程或冻结,墓碑有更多好处,比如前后台切换应用秒启动无等待,有效保留消息推送等。其原理是在应用切换到后台之后,根据一定的规则将其冻结在内存之中,除了少数时候唤醒进行工作外,正常情况下不允许占用cpu运行,通过阻止app在后台活动来降低耗电量。

众所周知,ios就使用了非常激进的墓碑机制,配合其对生态的控制,让众多应用乖乖听话,有通知统一走推送服务,从而取得相当可观的能耗控制能力。
而在MIUI这边,由于已经存在了mipush推送,再结合墓碑的合理配置,我们同样也能在省电方面取得不错的效果,同时保证舒适的使用体验。

默认情况下,官方millet的配置相对保守。对于很多比较耗电但又重要的应用(如QQ,微信,钉钉等IM软件),MIUI默认配置并没有对他们的后台活动做太多限制。在scene的进程管理中,经常可以看到QQ/微信跳起来轮询消息,又跳回去休眠往复循环的场景。另外,对于一些毒瘤应用,默认比较保守的millet也可能无法起到特别好的压制效果。这时候,就轮到强化模块MiT Lite出场了。

MiT Lite的官网和下载地址位于:

[链接]MiT lite

模块作者是酷安的 @f19没有新欢 大佬。直接去官网下载安装,在LSPosed管理器中启用,重启手机即可。注意,此强化模块需要MIUI13及以上才能工作。

MiT,启动!t耐克嘴

小米自带的millet墓碑主要要依赖“电量与性能”app来工作,如果有将其冻结的需要先解开。启动MiT后,可以在首页看到当前系统对millet的支持能力,以及cgroup freezer的版本。只有这边的信息都显示正常,millet及强化模块才可以正常工作。对于不支持millet的版本,如MIUI13以下的旧版,就只能改用第三方的墓碑机制了。

MiT首页

接下来,第二个选项卡页面显示了所有应用及其采用的冻结策略(墓碑策略):

所有应用的冻结策略

刚开始,所有应用都是默认状态,也就是说沿用系统默认的冻结策略。前文说了,系统默认的策略对于很多重要应用和毒瘤应用的压制效果并不好,于是我们可以点击需要修改策略的目标应用,然后选择合适的策略进行增强限制:

可选冻结策略

这里能选的策略有不少。其中默认指沿用系统本身的墓碑策略,冻结和不冻结就是字面意思:正常使用或者不使用墓碑机制;强制冻结应该是压制能力更强的墓碑。
而后面两个网络解冻就是指应用冻结后保持网络连接,如果出现网络活动则将其唤醒。这一般适用于需要监听网络消息并发出通知的应用,如各IM应用、快递和外卖app、邮件app等。
自定义冻结可以针对比较难压制的应用进行针对性设置:

自定义冻结策略

设置完成后,millet就将按你的设置对所选应用进行墓碑策略的执行。

事实上,MiT并没有引入新的墓碑机制,而是利用系统millet机制本身,加以更激进的控制策略来达到目的。因此,整体对于应用的兼容性较强,不容易出现应用彻底睡死导致恢复时彻底卡死的情况。
另外,目标应用离开前台(也就是切换到其他应用)后没多久就会快速进入墓碑,不需要锁屏,也不需要主动去划掉进程卡片,总的效果还是比较不错的。

第三个冻结列表页面,会滚动刷新所有当前millet冻结的应用及其状态。

已冻结列表及各应用状态

比如我这里的截图,针对比较难压制的qq,我采用了自定义设置中的强化冻结+关闭socket+不检查binder策略,让其进入后台之后被严格压制住,避免反复唤醒,所有消息都走mipush推送。实测效果不错,并没有出现丢消息的情况。
另外几个应用采用如图的策略,对于邮件之类需要监听网络的应用,采用带网络唤醒的策略;不需要网络或者接受消息的应用直接选择冻结即可。
而对于不毒瘤,或者需要后台持续工作的app(如李跳跳,密码管理器等各种辅助应用),就不适合在这里设置冻结策略,否则被墓碑过后他们也将无法正常工作。

一番捣鼓之后,手机的电池消耗确实有了一些改善

这机子的电池健康度已经只剩八十多,之前多开点应用续航就尿崩。如今能有这样的电池消耗曲线,属实是非常难得。

有酷友可能会认为官方millet的压制能力不够,进而去使用其他第三方的墓碑工具或模块;我个人体验下来发现,其实调教得当的情况下,官方墓碑的压制能力也是相当可以的。
比如按上述自定义配置进入墓碑的qq会被压制在墓碑中无法唤醒,并且所有的通知消息都会走mipush推送;这也证明其确实被有效压制,即使是来消息也未被唤醒。

不过,这个应用也有一些小bug。比如,有时候已经被冻结的应用并不会显示在冻结列表里面,或者刷新不出来,但是实际冻上了。还有,有些情况下偶尔会出现墓碑逃逸的问题。由于没有作者联系方式也无法反馈,也只能作罢,等待作者进行修复。

另外,之前研究墓碑的时候,还看到有酷友提到开发者选项当中自带的“暂停执行已缓存的应用”的选项,并建议打开。事实上,已经有大佬扒源码对相关机制的原理进行了分析,详见查看链接
按文中的说法,此机制的效果几乎可以视为没有,触发墓碑的条件非常苛刻,以至于毒瘤应用可以轻松绕过。况且,系统自带的millet经过调教也应该已经拥有足够的压制能力,因此,没有必要特地去打开此开关。

最后再补充一点。说了这么多,其实对于省电最佳的方式还是直接划掉卡片,杀死进程。一个被杀死的进程如果没有自启动权限,自身将无法启动,也不占用任何内存,可谓是干净又卫生啊。。受虐滑稽受虐滑稽当然,实际使用体验就没有墓碑这么好,比如打开应用之后状态全丢,没法像墓碑一样快速恢复到冻结之前的状态等等。事实上,墓碑和系统的自启动管理机制也并不矛盾,两者配合使用,才能达到最佳效果。