很多人吐槽安卓卡或者发热严重, 几乎可以 100%肯定出现这种情况必然是有 app 在疯狂占用 cpu 。
我有几次出现这种突然变卡和发热的情况,然后使用 top 命令后发现好几次是微信在后台长时间占用 50%以上的 cpu 使用率。
如果能做到的话可以利用一些自动化的方式让 app 在后台的时候严格限制 cpu 的使用率,前台的时候可以不限制,以免前台的时候操作 app 很卡。
1
66beta 2021-06-02 14:25:44 +08:00
单个 APP 的好像没有,整体的话 EX Kernel Manager
|
2
Jirajine 2021-06-02 14:32:40 +08:00 1
|
3
zictos OP @Jirajine #2 不错,功能很多,就光一个‘进程管理’就很实用,可以看到每个 app 的 cpu 使用率,而 top 命令不够直观。
不过好像还是不能针对 app 限制某个 app 在后台时的 cpu 使用率。好像只能是打开某个 app 就把手机的 cpu 整体设置到某个频率,这样的话如果是某个 app 使用了“性能模式”,那后台的 app 应该也是性能模式了。这种控制用 tasker 好像也可以实现。 |
4
skylancer 2021-06-02 18:32:06 +08:00
继续 cgroup?
|
5
zictos OP 更新一下,2 楼推荐的软件非常好用。
可以设置后台的 app 只使用 cpu 的某个核心。 比如一个 4 核 cpu 就设置后台的 app 只使用 cpu 的第一个核心。前台的 app 就可以使用 cpu 的所有核心。 这样不管后台的 app 怎么占用 cpu,都会有三个核心是空闲的。所以后台的 app 不会影响前台 app,前台 app 无论什么时候都速度很快 |
6
zictos OP @skylancer #4 linux 是可以限制进程的 cpu 使用率的,不知道安卓借助 termux 等工具能否做到。不过现在用我在 5 楼说的方式也很实用。
|
7
byte10 2021-06-02 19:42:40 +08:00
有的 我就在用,但是要 root,app 名称是 scene,可以控制后台 app 和系统只用 2 个小核心,前台 app 只用 2 个大核心,非常省电
|
8
zictos OP @byte10 #7 你说的 scene 就是 2 楼说的程序,我刚试了,效果真的非常好。不但省电而且手机变得非常流畅。如果要是能够针对不同程序指定使用几个核心就好了,比如某个后台程序我想使用 4 个核心,其他后台程序只使用 1 个或 2 个核心。
|
9
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,可能更费电。
|
10
zictos OP @jjpprrrr #9 这样设置主要是为了对付国内的流氓 app 的。国内的流氓 app 根本不敢让他们后台运行,都不知道在后台干什么,明明什么都没做还占用百分之几十左右的 cpu 使用率,而且很多时候还是长时间占用,导致手机变卡以及发热。
也就是说不存在执行同样的任务耗时问题,因为你根本就什么都没执行。流氓 app 是你资源有多少,他就疯狂给你占用多少。另外这个主要还是亮屏的时候的作用比较大,操作会流畅很多,也不会发热了,亮屏的时候也根本不用考虑休眠问题。熄屏情况下也要限制,不然流氓 app 可能也长时间占用 cpu 不休眠,我限制了 cpu,起码就算他长时间占用,耗电也会大大降低。 另外既然这个设置是安卓系统本来就支持的,那看来想要为指定 app 设置要使用的 cpu 核心应该是做不到的,只能为整个后台程序设定一种方案。 |