Android 如何限制指定 app 的 cpu 使用率或频率? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zictos
V2EX    Android

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

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

    很多人吐槽安卓卡或者发热严重, 几乎可以 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 &nbp;   FAQ     Solana     2067 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:31 PVG 08:31 LAX 16:31 JFK 19:31
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86