Android CPU使用过大的问题解决以及造成的原因
2017-03-31 17:16
399 查看
问题描述:
最近在临近项目交付的时候,检查了一下项目,发现测试机(三星 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,会提示应用没有反应
二、可能会造成手机死机,手机发烫严重
三、应用间的交互不流畅,用户体验差等等
具体就分析到这里,希望能帮助大家更好的去学习!
最近在临近项目交付的时候,检查了一下项目,发现测试机(三星 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,会提示应用没有反应
二、可能会造成手机死机,手机发烫严重
三、应用间的交互不流畅,用户体验差等等
具体就分析到这里,希望能帮助大家更好的去学习!
相关文章推荐
- Android类app的安全问题造成漏洞的原因以及解决方法
- android中使用SoftRefrence解决Bitmap过大内存溢出问题
- Android中使用Handler造成内存泄露的原因和解决方法
- NSURL使用urlWithString得到的对象为nil的问题原因以及解决
- 自己在使用Android Maps API 开发地图应用程序时遇到的问题,以及解决的办法
- Android手机JmDNS的使用以及解决某些品牌手机Multicast无法接收组播消息的问题
- android proguard使用心得和遇到的若干问题以及解决思路。
- Android问题—Toast不显示的原因和在子线程中使用方法以及Looper类详细解析
- 细讲android获取流量使用情况,以及解决调用流量接口不准问题(非TrafficStats,而是NetworkStatsHistory)
- 拿什么拯救:Android Studio 时代 继续使用Eclipse开发Android app时遇到的几个问题以及解决办法
- 使用ArcGIS GP服务遇到的问题,原因以及解决方法 - 客户端API开发(Javascript/Flex/Silverlig 转载
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决
- android客户端通过Get方式提交参数给服务器,使用URL和HttpURLConnection实现,以及乱码问题解决
- android使用磁场传感器和加速度传感器确定当前朝向(即:方位角),以及常见问题的解决办法
- CISCO Catalyst 6500交换机配置ERSPAN造成CPU高的问题以及解决办法
- Android使用Handler造成的内存泄露问题的解决
- 解决Android使用百度定位坐标显示到地图上偏移过大问题
- Android开发ViewPager的预加载和Fragment的销毁问题,以及tabLayout+ViewPager的使用,tablayout平板适配问题解决
- 使用redis集群+tomcat缓存共享下session丢失问题产生原因以及解决
- 使用ThinkAndroid数据库及解决造成ANR问题