Android CPU使用过大的问题解决以及造成的原因

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_28607155/article/details/68927354

问题描述:

最近在临近项目交付的时候,检查了一下项目,发现测试机(三星 sch-i699i)异常的会发烫,项目出现卡顿现象。

问题跟踪:

一、发烫是本身的应用造成还是其他后台运行中的应用造成

二、如果是本身的项目造成的,又是什么原因造成的

问题验证:

一、先卸载手机上的其他应用,在进行运行本身项目,发现还是会发烫,确定为本身的应用问题

二、在验证自身的应用上,就需要详细去考虑,造成这样的原因

详细验证:

使用Android studio的开发者都知道里面的Android Monitor根据Monitor中的CPU可以看出目前CPU使用率

Monitor中CPU使用率高时:

从图片上可以看出项目在一开始就有很高的CPU使用率。但是具体是什么原因,来双击上图的小闹钟按钮,就出现了如下图的分析数据图

 

 

 从上图可以看出在首页的MessageQueue.nativePoIIOnce上独占率(Exclusive Time)达到了99.2%,根据Handler机制可以清楚(这里就不详细讲),MessageQueue类是主要的消息队列处理类,可以根据子线程来异步更新UI,所以问题就应该是在线程上,现在具体的定位到是线程上出现问题,就找到CPU使用率高时所出现的位置,从Monitor的CPU图可以看出应用从一安装就开始高CPU的使用率,所以就可以在activity进入界面时,所经历的oncreate、onResume、onStart、onRestart生命周期上开启的线程中查看,发现项目的onResume上开启的线程带了while(true)无限循环,子线程也没有得到休息,导致CPU占有率高,就可以根据项目需要进行修改代码。

或许有人说从分析数据的图片看不出来那里有问题怎么办,我们可以根据操作来加断点,比如程序一开始CPU的使用率一直不高,但是在进入某个操作后才变高,所以就可以在具体的代码块加断点,查看到底到了那块代码,那句代码,才出现CPU使用率居高不下。

项目自身的问题找出来了,现在来分析一下,什么原因会造成CPU率居高不下

一、应用出现大量的图片处理以及加载或者大量的音频、视频处理跟加载。PS:大量的图片、音频、视频处理最好使用JNI技术来实现

二、socket线程长时间运转,没有休息,也没有关闭

三、对系统造成大负担的操作

那么CPU使用过大会造成什么影响:

一、会造成ANR,会提示应用没有反应

二、可能会造成手机死机,手机发烫严重

三、应用间的交互不流畅,用户体验差等等

具体就分析到这里,希望能帮助大家更好的去学习!

 

展开阅读全文

没有更多推荐了,返回首页