Android-性能优化(渲染与内存)原理与工具使用两方面来分析

本文探讨Android性能优化,主要关注渲染机制和内存管理。通过分析Overdraw情况减少渲染成本,讲解GC工作原理,强调内存泄漏的影响。介绍Memory Monitor和MAT等工具用于监测内存和分析内存泄漏。同时,建议在Activity生命周期中控制其他类生命周期,避免内存泄漏。Heap Tool和Allocation Tracker则帮助定位和解决内存问题。
摘要由CSDN通过智能技术生成

Google之前发布了关于Android性能优化典范的专题,一共16个短视频,每个3-5分钟,帮助开发者创建更快更优秀的Android App。课程专题不仅仅介绍了Android系统中有关性能问题的底层工作原理,同时也介绍了如何通过工具来找出性能问题以及提升性能的建议。主要从三个方面展开,Android的渲染机制,内存与GC,电量优化。下面是对这些问题总结梳理,和一些个人理解。

1.Android渲染机制:

用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。
Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps。
为了能够使得App流畅,我们需要在每一帧16ms以内处理完所有的CPU与GPU计算,绘制,渲染等。
引起卡顿操作
(1)Android系统可能无法在16ms内,及时完成那些复杂的界面渲染操作,就发生卡帧现象。
(2)复杂操作处理超过16ms,比如20ms后处理完成 发出VSYNC信号 ,那么 系统在得到信号的时候就无法进行正常渲染,这样就发生了丢帧现象。

我们可以通过一些工具来定位问题,比如可以使用HierarchyViewer来查找Activity中的布局是否过于复杂,也可以使用手机设置里面的开发者选项,打开Show GPU Overdraw等选项进行观察。你还可以使用TraceView来观察CPU的执行情况,更加快捷的找到性能瓶颈。

layout太过复杂, UI上有层叠太多的绘制单元, 动画执行的次数过多等都导致GPU负载过重, 从这些方面考虑性能优化。
Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。
在多层次的UI结构里面,如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次。这就浪费大量的CPU以及GPU资源。
设计上追求更华丽的视觉效果的时候,我们就容易陷入采用越来越多的层叠组件来实现这种视觉效果的怪圈。这很容易导致大量的性能问题,为了获得最佳的性能,我们必须尽量减少Overdraw的情况发生。
通过手机设置里面的开发者选项,打开Show GPU Overdraw的选项,可以观察UI上的Overdraw情况。


蓝色,淡绿,淡红,深红代表了4种不同程度的Overdraw情况,我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。


Overdraw有时候是因为你的UI布局存在大量重叠的部分,还有的时候是因为非必须的重叠背景。例如某个Activity有一个背景,然后里面的Layout又有自己的背景,同时子View又分别有自己的背景。仅仅是通过移除非必须的背景图片,这就能够减少大量的红色Overdraw区域,增加蓝色区域的占比。这一措施能够显著提升程序性能。

需要考虑布局参数影响:
(1) 需要注意的是:任何时候View中的绘制内容发生变化时,都会重新执行创建DisplayList,渲染DisplayList,更新到屏幕上等一系列操作。这个流程的表现性能取决于你的View的复杂程度,View的状态变化以及渲染管道的执行性能。举个例子,假设某个Button的大小需要增大到目前的两倍,在增大Button大小之前,需要通过父View重新计算并摆放其他子View的位置。修改View的大小会触发整个HierarcyView的重新计算大小的操作。如果是修改View的位置则会触发HierarchView重新计算其他View的位置。如果布局很复杂,这就会很容易导致严重的性能问题。我们需要尽量减少Overdraw,View操作的时候需要谨慎处理。

(2)移除非必需的UI组件,这些操作能够减少Measure,Layout的计算时间。
关于我们自定义View的过程中,在变化的哪个节点, Measure,layout,draw,都是我们需要优化注意的点。

(3) 非可见的UI组件进行绘制更新会导致Overdraw。android系统组件是会自动避免绘制那些完全不可见的组件来尽量减少overdraw。 但是不幸的是,对于我们自定义的View(重写了onDraw方法),Android系统无法检测具体在onDraw里面会执行什么操作,系统无法监控并自动优
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值