如何解决CPU使用率过高问题

在开发过程中,我们会遇到手机的CPU使用率过高而引发的问题,那接下来,我对这方面知识做些整理及归纳
1. CPU使用背景知识:
CPU利用率是指:CPU执行非系统空闲进程的时间 / CPU总的执行时间。

而Android关于进程使用率的限制:

前台进程不超过95%,后台进程5%, 但是在系统没有前台进程时,后台进程可以超过5%

(关于什么是前/后台进程,我就不啰嗦了)


2. 可能引发的问题

CPU使用率过高,CPU过于繁忙,会使整个手机无法响应用户,整体性能降低,用户体验就会很差,也容易引起ANR等等一系列问题。


3. 解决方案

a. 如果已经导致ANR, 则去log里面搜索"ANR in"

b. 没有导致ANR则

 先看看当前CPU使用状况,看看是不是别人占太多了,把CPU用得太狠

 adb shell top


User 19%, System 16%, IOW 0%, IRQ 0%
User 63 + Nice 0 + Sys 53 + Idle 200 + IOW 1 + IRQ 0 + SIRQ 0 = 317


     PID PR CPU% S  #THR     VSS       RSS      PCY    UID        Name
    187  0    14%     S    19      72560K   8484K     fg    system   /system/bin/surfaceflinger
  7499  0      4%     S    40   385420K   54392K   bg   9992       com.htc.album
19792  0     3%      R     1         1128K   468K       fg     root         top

注:PCY就是显示是前台进程(fg)还是后台进程(bg)


如果还是自己应用的问题,则使用TraceView进行debug

TraceView说明(摘自网上)

TraceView
    1)功能:用于热点分析和性能优化,分析每个函数占用的CPU时间,调用次数,函数调用关系等
 2)方法:
  a)在程序代码中加入追踪开关
  import android.os.Debug;
  ……
  android.os.Debug.startMethodTracing(“/data/tmp/test”);// 先建/data/tmp目录
  ……// 被追踪的程序段
  android.os.Debug.stopMethodTracing();
  b)编译,运行后,设备端生成/data/tmp/test.trace文件
  c)把trace文件复制到PC端
  $ adb pull /data/tmp/test.trace ./
  d)使用android自带工具分析trace文件
  $ANDROID_SRC/out/host/linux-x86/bin/traceview test.trace
  此时可看到各个函数被调用的次数CPU占用率等信息
  e)使用android自带工具分析生成调用关系类图
  $ apt-get install graphviz# 安装图片相关软件
  $ANDROID_SRC/out/host/linux-x86/bin/dmtracedump -g test.png test.trace
  此时目录下生成类图test.png
 3)注意
  trace文件生成与libdvm模块DEBUG版本相冲突,所以此方法只适用于对非DEBUG版本模拟器的调试,否则在分析trace文件时会报错

通过上述方法找到占用CPU过高的代码,根据之前的知识(后台进程CPU使用率 < 5%),把该代码段放到后台进程中执行或开低优先级的Thread去执行。







  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值