解决安卓CPU使用率过高问题

        用Android Studio 调试程序的时候可以查看CUP使用情况,接手的项目中用户反馈特别卡,甚至有用户通过第三方软件反馈现在负责的APPCPU 占用率高的截图,然后Android Studio 运行观察 CPU 和内存占用率。Word天,厉害了 !!!


CPU占用率一直70%,ListView 也是加载完 CPU占有率会下降。

可能引起的原因:

1.有非常多的网络请求或者开了很多进程

2.大量大图片加载或布局可能引起该问题

问题排查:

先关闭引用的几个SDK网路请求,发现CPU占用率基本不变,还是70%,说明不是网络请求引起的。

在首页有四个Fragment页存同时放到Viewpager 中,就先每次显示一个Viewpager,发现4个Fragment 都是占 40% 晃动,然后viewpager中存入两个Fragment时CPU占有率就70%左右跳动。说明是Fragment 中的 一些操作引起的。

然后查看布局,发现以前写的布局嵌套层次有些深,进行优化,再运行观察CPU占有率还是很高。这就郁闷了。

灵光一闪想起了Bugly上一直出现的一些OOM,而OOM又是Glide 加载Gif 图片引起的,Gif 的加载在BaseActivity 和 BaseFragment 中初始化,在继承它的页面进行调用进行动态图加载,然后全局搜索 使用Glide进行Gif 加载的调用,进行注释,再运行,效果立即显现,刚开始运行CPU占用率 15%,加载完 回到 0。内存由六七十降到十几M。也是被产品们的需求折服,前段时间发现OOM和Glide 加载动态图就让修改方案,无果,现在改成了 Glide 加载Gif 显示次数限制,加载完进行回收,CPU和内存占用都属于正常。 


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


解决方案
1. 如果已经导致ANR, 则去log里面搜索"ANR in"
2. 没有导致ANR则先看看当前CPU使用状况,看看是不是别人占太多了
3.查找程序中有没有特殊布局或者特殊操作(GPS定位,一直刷新类的服务等),特殊加载(Gif图片加载,视频,音频加载等)

欢迎补充


要实现安卓设备的CPU使用率监控,可以使用以下步骤: 1. 获取CPU信息:通过读取系统文件/proc/stat,可以获取当前CPU的运行状态,包括总的CPU使用时间、空闲时间等。 2. 计算CPU使用率:根据获取的CPU信息,可以计算出当前的CPU使用率。可以利用简单的公式: CPU使用率 = (总的CPU使用时间 - 空闲时间) / 总的CPU使用时间 * 100% 3. 定时更新CPU使用率:为了实时监控CPU使用率,可以使用定时器来定期执行获取CPU信息和计算CPU使用率的操作。 4. 显示CPU使用率:可以在界面上显示当前的CPU使用率,可以使用TextView等控件来显示。 以下是一个简单的示例代码实现: ```java import android.os.Handler; import android.os.HandlerThread; import android.os.Message; public class CpuMonitor { private HandlerThread handlerThread; private Handler handler; private int cpuUsage; public CpuMonitor() { handlerThread = new HandlerThread("CpuMonitorThread"); handlerThread.start(); handler = new Handler(handlerThread.getLooper()) { @Override public void handleMessage(Message msg) { readCpuStat(); sendEmptyMessageDelayed(0, 1000); // 定时更新CPU使用率,间隔为1秒 } }; } public void startMonitor() { handler.sendEmptyMessage(0); } public void stopMonitor() { handler.removeCallbacksAndMessages(null); } public int getCpuUsage() { return cpuUsage; } private void readCpuStat() { // 读取 /proc/stat 文件,解析出总的CPU使用时间和空闲时间等信息 // 计算得到CPU使用率 // 更新cpuUsage变量 } } ``` 上述代码创建了一个CpuMonitor类,其中使用了HandlerThread来在后台线程进行CPU使用率的监控。startMonitor方法用于开启监控,stopMonitor方法用于停止监控。getCpuUsage方法可以获取当前的CPU使用率。readCpuStat方法用于读取/proc/stat文件并计算CPU使用率。 使用该类,可以在安卓应用中实现CPU使用率的监控功能。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值