Think CodingAndroid 开发相关文章收集1-Android开发知识

Android性能全面分析与优化方案研究—几乎是史上最全最实用的

2018-04-06  本文已影响5411人  Moninn

写在前面的前面:该文章已授权微信公众号hongyangAndroid和DriodDeveloper发布,想在公号上看的可以关注哦。

写在前面,如果面对复杂的动画效果你一筹莫展,不烦看看这篇文章:LottieAndroid使用详解及源码解析—轻而易举实现各种复杂动画

该文章是结合我司产品手机迅雷做的一个全面的性能分析及优化方案。本文篇幅较长,几乎涵盖了所有的性能方面问题,以及给出了如何查找和解决问题的方案,几乎是史上最全最实用的Android性能分析和优化文章。
另外,由于简书对MarkDown的支持问题导致图片格式看着有点乱,还请多多谅解,细心阅读。

结合以下四个部分讲解:


性能问题分类

1、渲染问题:过度绘制、布局冗杂

2、内存问题:内存浪费(内存管理)、内存泄漏

3、功耗问题:耗电

性能优化原则和方法

1、性能优化原则

2、优化方法

性能优化工具

以下优化工具在下面文章中具体介绍使用方法。

1、手机开发者选项:调试GPU过度绘制、启用严格模式、显示CPU使用情况、GPU呈现模式分析、显示所有"应用程序无响应"。(小米手机开发开发者选项中名字)

2、IDE中:Android Studio,比如静态代码检测工具、Memory Monitor、CPU Monitor、NetWork Monitor、GPU Monitor、Layout Inspector、Analyze APK等。

3、SDK中:sdk\tools,比如DDMS、HierarchyViewer、TraceView等。

4、第三方工具:MAT、LeakCanary、GT等。

性能优化指标

1、渲染

2、内存

3、功耗


一、渲染问题

先来看看造成应用UI卡顿的常见原因都有哪些?

1、人为在UI线程中做轻微耗时操作,导致UI线程卡顿;

2、布局Layout过于复杂,无法在16ms内完成渲染;

3、同一时间动画执行的次数过多,导致CPU或GPU负载过重;

4、View过度绘制,导致某些像素在同一帧时间内被绘制多次,从而使CPU或GPU负载过重;

5、View频繁的触发measure、layout,导致measure、layout累计耗时过多及整个View频繁的重新渲染;

6、内存频繁触发GC过多(同一帧中频繁创建内存),导致暂时阻塞渲染操作;

7、冗余资源及逻辑等导致加载和执行缓慢;

8、臭名昭著的ANR;

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。(Google官方说的)

Android系统每隔16ms发出VSYNC信号(vertical synchronization --场扫描同步,场同步,垂直同步),触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms(1000/60=16.67ms)内完成。

如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,这样就发生了丢帧现象。那么用户在32ms内看到的会是同一帧画面。


1、过度绘制

Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次的UI结构里面,如果不可见的UI也在做绘制的操作,这就会导致某些像素区域被绘制了多次。这就浪费大量的CPU以及GPU资源,找出界面滑动不流畅、界面启动速度慢、手机发热。

2、布局优化

布局太过复杂,层级嵌套太深导致绘制操作耗时,且增加内存的消耗。
我们的目标就是,层级扁平化

3、介绍一下查看渲染性能的工具

二、内存问题

1、内存浪费

程序内存的管理是否合理高效对应用的性能有着很大的影响。
推荐阅读Android性能优化典范-第3季,参考:http://hukai.me/android-performance-patterns-season-3/

2、内存泄漏

3、性能优化必备神器推荐(Lint)

三、耗电问题

例如:关闭屏幕时关闭掉登录ping,屏幕亮时再打开。
以上的很多问题都会导致耗电量增加。
如何优化后台下载时的耗电手机发烫问题?
需要具体的硬件工具测试应用耗电量,需要一套耗电量测试标准。

上一篇 下一篇

猜你喜欢

热点阅读