欢迎大家来到IT世界,在知识的湖畔探索吧!
性能问题一直以来都受到开发和测试人员的重视。性能问题有很多,比如卡顿、闪退、崩溃、耗时长、启动慢等等,这些都是属于性能方面的。本篇文章先带大家了解下android App卡顿的相关内容!
卡顿原因分析及处理
1.过于复杂的布局
UI渲染的整个过程是由CPU和GPU两个部分协同完成的。CPU负责UI布局元素的Measure,Layout,Draw等相关运算执行。 GPU负责栅格化(rasterization),将UI元素绘制到屏幕上。
如果我们的UI布局层次太深,或是自定义控件的onDraw中有复杂运算,CPU的相关运算就可能大于16ms,导致卡顿。
这个时候,我们需要借助Hierarchy Viewer这个工具来帮我们分析布局了。 Hierarchy Viewer不仅可以以图形化树状结构的形式展示出UI层级,还对每个节点给出了三个小圆点,以指示该元素Measure,Layout,Draw的耗时及性能。
过度绘制(Overdraw)
上节说的CPU方面的, 关于GPU的绘制, 如果我们的界面存在Overdraw, 也可能导致卡顿.
Overdraw: 用来描述一个像素在屏幕上多少次被重绘在一帧上。
通俗的说: 理想情况下,每屏每帧上,每个像素点应该只被绘制一次,如果有多次绘制,就是Overdraw,过度绘制了。
所谓Overdraw,就是在一个像素点上绘制了多次。 常见的就是:
(1).绘制了多重背景。
(2).绘制了不可见的UI元素。
Overdraw主要原因是背景的多重绘制,或是不可见的View在背后绘制等,只留一个层次的背景便可解决问题。
3.UI线程的复杂运算
UI线程的复杂运算会造成UI无响应,当然更多的是造成UI响应停滞,卡顿。产生ANR已经是卡顿的极致了
可以使用第三方检测工具(这里推荐友盟U-APM),全面检测App,查看日志,找出你的应用在何处出现问题,再对症下药。
4.频繁的GC
上面说的都是处理上的,CPU,GPU相关的。 实际上内存原因也可能会造成应用不流畅,卡顿的。
为什么说频繁的GC会导致卡顿呢?
简而言之,就是执行GC操作的时候,任何线程的任何操作都会需要暂停,等待GC操作完成之后,其他操作才能够继续运行,故而如果程序频繁GC,自然会导致界面卡顿。
导致频繁GC有两个原因:
1.内存抖动(Memory Churn),即大量的对象被创建又在短时间内马上被释放。
2.瞬间产生大量的对象会严重占用Young Generation的内存区域,当达到阀值,剩余空间不够的时候,也会触发GC。即使每次分配的对象需要占用很少的内存,但是他们叠加在一起会增加Heap的压力,从而触发更多的GC。
一般来说瞬间大量产生对象一般是因为我们在代码的循环中new对象,或是在onDraw中创建对象等。所以说这些地方是我们尤其需要注意的…
通过上述所讲的内容了解到了卡顿的原因及处理办法。接下来说说应该怎么去检测卡顿,传统的方法是要开发人员一遍一遍的调试代码,这样无疑浪费了大量的时间在复现卡顿问题上,所以还是推荐使用工具做辅助,像“友盟+u-apm应用性能监控平台”的卡顿分析功能是通过U-APM提供的监控SDK 捕获所监控App主线程消息执行超时的情况,帮助您优化用户使用体验、定位卡顿问题位置,排查用户反馈问题是否与卡顿现象间接引发有关。它作为一款监测工具不仅可以帮助开发者监测app问题,还减轻了开发者的负担和压力!
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/50113.html