V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zictos
V2EX  ›  Android

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

  •  
  •   zictos · 2021-06-02 14:22:02 +08:00 · 10850 次点击
    这是一个创建于 1299 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    比如一个 4 核 cpu 就设置后台的 app 只使用 cpu 的第一个核心。前台的 app 就可以使用 cpu 的所有核心。
    这样不管后台的 app 怎么占用 cpu,都会有三个核心是空闲的。所以后台的 app 不会影响前台 app,前台 app 无论什么时候都速度很快
    zictos
        6
    zictos  
    OP
       2021-06-02 18:49:41 +08:00
    @skylancer #4 linux 是可以限制进程的 cpu 使用率的,不知道安卓借助 termux 等工具能否做到。不过现在用我在 5 楼说的方式也很实用。
    byte10
        7
    byte10  
       2021-06-02 19:42:40 +08:00
    有的 我就在用,但是要 root,app 名称是 scene,可以控制后台 app 和系统只用 2 个小核心,前台 app 只用 2 个大核心,非常省电
    zictos
        8
    zictos  
    OP
       2021-06-02 20:41:18 +08:00
    @byte10 #7 你说的 scene 就是 2 楼说的程序,我刚试了,效果真的非常好。不但省电而且手机变得非常流畅。如果要是能够针对不同程序指定使用几个核心就好了,比如某个后台程序我想使用 4 个核心,其他后台程序只使用 1 个或 2 个核心。
    jjpprrrr
        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,可能更费电。
    zictos
        10
    zictos  
    OP
       2021-06-02 21:57:52 +08:00
    @jjpprrrr #9 这样设置主要是为了对付国内的流氓 app 的。国内的流氓 app 根本不敢让他们后台运行,都不知道在后台干什么,明明什么都没做还占用百分之几十左右的 cpu 使用率,而且很多时候还是长时间占用,导致手机变卡以及发热。
    也就是说不存在执行同样的任务耗时问题,因为你根本就什么都没执行。流氓 app 是你资源有多少,他就疯狂给你占用多少。另外这个主要还是亮屏的时候的作用比较大,操作会流畅很多,也不会发热了,亮屏的时候也根本不用考虑休眠问题。熄屏情况下也要限制,不然流氓 app 可能也长时间占用 cpu 不休眠,我限制了 cpu,起码就算他长时间占用,耗电也会大大降低。

    另外既然这个设置是安卓系统本来就支持的,那看来想要为指定 app 设置要使用的 cpu 核心应该是做不到的,只能为整个后台程序设定一种方案。
    YumeMichi
        11
    YumeMichi  
       2021-06-08 11:01:20 +08:00
    @jjpprrrr dalao 你也在 v2 呀
    jjpprrrr
        12
    jjpprrrr  
       2021-06-08 11:09:15 +08:00
    @YumeMichi #11 😆
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   887 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 19:55 · PVG 03:55 · LAX 11:55 · JFK 14:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.