Android 如何限制指定 app 的 cpu 使用率或频率?

2021-06-02 14:22:02 +08:00
 zictos

很多人吐槽安卓卡或者发热严重, 几乎可以 100%肯定出现这种情况必然是有 app 在疯狂占用 cpu 。
我有几次出现这种突然变卡和发热的情况,然后使用 top 命令后发现好几次是微信在后台长时间占用 50%以上的 cpu 使用率。

如果能做到的话可以利用一些自动化的方式让 app 在后台的时候严格限制 cpu 的使用率,前台的时候可以不限制,以免前台的时候操作 app 很卡。

10272 次点击
所在节点    Android
12 条回复
66beta
2021-06-02 14:25:44 +08:00
单个 APP 的好像没有,整体的话 EX Kernel Manager
Jirajine
2021-06-02 14:32:40 +08:00
zictos
2021-06-02 15:07:55 +08:00
@Jirajine #2 不错,功能很多,就光一个‘进程管理’就很实用,可以看到每个 app 的 cpu 使用率,而 top 命令不够直观。
不过好像还是不能针对 app 限制某个 app 在后台时的 cpu 使用率。好像只能是打开某个 app 就把手机的 cpu 整体设置到某个频率,这样的话如果是某个 app 使用了“性能模式”,那后台的 app 应该也是性能模式了。这种控制用 tasker 好像也可以实现。
skylancer
2021-06-02 18:32:06 +08:00
继续 cgroup?
zictos
2021-06-02 18:47:21 +08:00
更新一下,2 楼推荐的软件非常好用。
可以设置后台的 app 只使用 cpu 的某个核心。

比如一个 4 核 cpu 就设置后台的 app 只使用 cpu 的第一个核心。前台的 app 就可以使用 cpu 的所有核心。
这样不管后台的 app 怎么占用 cpu,都会有三个核心是空闲的。所以后台的 app 不会影响前台 app,前台 app 无论什么时候都速度很快
zictos
2021-06-02 18:49:41 +08:00
@skylancer #4 linux 是可以限制进程的 cpu 使用率的,不知道安卓借助 termux 等工具能否做到。不过现在用我在 5 楼说的方式也很实用。
byte10
2021-06-02 19:42:40 +08:00
有的 我就在用,但是要 root,app 名称是 scene,可以控制后台 app 和系统只用 2 个小核心,前台 app 只用 2 个大核心,非常省电
zictos
2021-06-02 20:41:18 +08:00
@byte10 #7 你说的 scene 就是 2 楼说的程序,我刚试了,效果真的非常好。不但省电而且手机变得非常流畅。如果要是能够针对不同程序指定使用几个核心就好了,比如某个后台程序我想使用 4 个核心,其他后台程序只使用 1 个或 2 个核心。
jjpprrrr
2021-06-02 21:41:07 +08:00
@zictos #8 你说的这些,本质上就是 cpuset 实现的,android 的用户态会把进程分为几个类型,top-app, foreground, background, system-background, restricted 等等,可以设置每种类型的进程应该跑在哪几个核心上。一般来说,手机出厂都应该在 init.xxx.rc 里面配置好了默认的 cpuset,因为高通 /MTK 针对每个 soc 都写好了配置。不是说后台进程用的核心越少越好,你还需要考虑一个情况,就是核心越少,执行同样的任务需要的时间越长,也意味着对应的核心需要更长时间的维持更高的频率( EAS 中,核心频率的调度是跟负载相关的)。少核心,长时间高频率,可能比多俩核心但是快速执行完马上去休眠或者 hotplug,可能更费电。
zictos
2021-06-02 21:57:52 +08:00
@jjpprrrr #9 这样设置主要是为了对付国内的流氓 app 的。国内的流氓 app 根本不敢让他们后台运行,都不知道在后台干什么,明明什么都没做还占用百分之几十左右的 cpu 使用率,而且很多时候还是长时间占用,导致手机变卡以及发热。
也就是说不存在执行同样的任务耗时问题,因为你根本就什么都没执行。流氓 app 是你资源有多少,他就疯狂给你占用多少。另外这个主要还是亮屏的时候的作用比较大,操作会流畅很多,也不会发热了,亮屏的时候也根本不用考虑休眠问题。熄屏情况下也要限制,不然流氓 app 可能也长时间占用 cpu 不休眠,我限制了 cpu,起码就算他长时间占用,耗电也会大大降低。

另外既然这个设置是安卓系统本来就支持的,那看来想要为指定 app 设置要使用的 cpu 核心应该是做不到的,只能为整个后台程序设定一种方案。
YumeMichi
2021-06-08 11:01:20 +08:00
@jjpprrrr dalao 你也在 v2 呀
jjpprrrr
2021-06-08 11:09:15 +08:00
@YumeMichi #11 😆

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/780862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX