NoActive是由作者myflavor开发的XP模块,它的名字正如其所示,可以让Android后台CPU处于非活跃状态。NoActive的功能类似于iOS的墓碑后台机制。在iOS的墓碑后台机制中,当您正在使用一个应用程序时,如果您直接滑出去而不是关闭它,系统会将该应用程序冻结。所谓冻结,是指将应用程序保留在RAM(运存)中,但断开它与处理器的联系,使其无法执行任何操作。
应用说明:
作用域说明:
系统框架:
- Hook应用切换事件,冻结切换至后台的应用,解冻切换至前台的应用。
- Hook广播分发事件,屏蔽被冻结的应用接收广播,避免触发广播ANR。
- Hook计算oom_adj事件,修改后台应用的oom_adj值,白名单主进程为500,子进程为700,冻结名单主进程为700+,子进程为900+。
- Hook系统ANR事件,屏蔽ANR事件以避免系统误杀被冻结的应用。
- Hook系统是否开启暂停执行已缓存变量获取,避免解冻后应用再次活跃。
电量和性能(MIUI):
- Hook清理应用事件,将该方法置空以解决锁屏或夜间杀后台的问题。
- 禁用Millet功能,该功能与NoActive重复。
冻结方式说明:
- 目前Linux进程冻结方式有Kill -19、Kill -20、Cgroup Freezer V1、Cgroup Freezer V2。
- Kill -19和Kill -20兼容性较好,但存在Bug,进程仍然可能会重新加载。
- Google官方使用Cgroup Freezer V2。
- NoActive仅作用于系统框架,不需要Root权限。
- Kill方式使用Android的Process.sendSignal方法间接调用Kill,因此可能在某些系统中只有Kill -19或Kill -20有效,需要进行个别测试。
- Cgroup Freezer V1和V2是NoActive根据millet参考实现的方式,或者使用V2时调用Android的Process.setProcessFrozen方法实现。
- 因权限不足无法读取配置以判断Cgroup Freezer版本,因此通过Hook获取系统是否支持暂停执行已缓存来判断V2版本,其余则为V1。如果测试没有效果或冻结时报错,请选择Kill方式,并参考下方的配置文件说明进行配置。
配置文件说明:
目录:/data/system/NoActive
即时生效配置:
- blackSystemApp.conf:系统黑名单(系统APP默认为白名单)
- killProcess.conf:杀死进程名单(后台超过3秒杀死进程)
- whiteApp.conf:白名单APP(用户APP默认为黑名单)
- whiteProcess.conf:白名单进程(添加白名单APP时无需额外添加)
重启生效配置:
- debug:开启调试日志
- disable.oom:禁用修改oom_adj功能
- kill.19:使用Kill -19进行冻结
- kill.20:使用Kill -20进行冻结
- freezer.v1:使用Cgroup Freezer V1进行冻结(NoActive实现)
- freezer.v2:使用Cgroup Freezer V2进行冻结(NoActive实现)
- freezer.api:使用Cgroup Freezer API进行冻结(系统API)
- color.os:ColorOS专属配置(特殊oom_adj方式)
日志说明:
日志级别分为debug(调试信息)、info(基本信息)、warn(警告信息)、error(错误信息)。
应用预览:

下载地址: