Android知识Android开发手机移动程序开发

移动App性能评测与优化

2017-01-17  本文已影响792人  stringwu

本文是《移动App性能评测与优化》的读书笔记。
PS:说是读书笔记,其实就是摘录。

移动App的性能测试主要包括:内存使用情况、电量消耗、功能的流畅度等;

1. 内存

1.1 内存的主要组成索引:

1.2 内存测试工具

1.3 一个类的内存消耗

虚拟机在创建对象时的操作:

dex mmap在Android应用中的作用是映射classes.dex文件

1.4 dex 优化

省略掉dex的文件结构(自行查阅)

为了节省空间,dex将原先在 class 文件中重复的信息集中放置在一起,并以索引和指针的形式支持快速访问。

dex 文件中数据基本是按类名的字母顺序进行排列的,这样同样包名的类会排在一起,但程序实际执行时,同一个包下的类并不会全部调用到,而是跨包进行交互,但 mmap 加载了整个页面,可能会有很多无用的数据。

优化;

在APK的编译流程中,Proguard 混淆工具正好是能够对类名进行修改的,可以根据程序运行时的逻辑,将那些会互相调用的类改为为同一个 package 名,这样就可以使它们的数据排布在一起。

1.5 MAT(Memory Analyzer Tool)

使用MAT来分析应用的内存使用情况。通常在使用MAT打开hprof文件后,能够在首页看到Top Comnsumers和 component Report等功能,我们可以快速定位一些大块的内存消耗。但我们在分析时会发现系统资源类占据了很大一部分内存,因此为去除这部分对分析的干扰,我们在使用AndroidSDK提供的hprof-conv转换时需要增加一个参数:


hporf- conv [-z] <infile><outfile> -z:exclude non-app heaps,such as Zygote

如果hprof文件是已经转换过的,则可以使用OQL:


//在数据中寻找应用的Application类对象,将对象地址转换为十进制后输入以下查询语句:

select * from instanceof java.langObject s where s.@objectAddress> 1107296256

//(后面那串数字应该是Application类对象的地址)

采用这两种方法后,再使用MAT来分析就可以比较容易发现自身代码的内存问题。

1.6 测试经验

1.7 性能优化

2. 耗电

在保证用户的必要体验前提下,尽可能减少不必要的操作。几个优化方法:

方法一:CPU时间片

当应用退到后台运行时,尽量减少应用的主动运行,当检测到CPU时间片消耗异常时,深入线程进行分析;

使用 DDMS 的 traceview 工具:获取进程运行过程中的 traceview,定位CPU占用率异常的方法。

方法二 wake lock

前台运行时运不要去注册 wake lock。 此时注册没有任何意义,却会被计算到应用电量消耗中。后台运行时,在保证业务需要的前提下,应尽量减少注册 wake lock;降低对系统的唤醒频率,使用 partial wake lock 代替 wake lock;

方法三 传感器

合理地设置 GPS 的使用时长和使用频率;

方法四 云省电策略

可考虑定期上报用户手机电量数据的方式来分析问题;

3. 流畅度

3.1 分析工具

< merge > 标签:用于减少View树的层次来优化 Android 的布局,通过该标签可以把 < merge > 标签里的UI合到上一层的 layout中。

< ViewStub> 标签,最大的优点是当你需要时才会加载,使用它并不会影响UI初始化时的性能。各种不常用的布局可以使用该标签来减少内存使用量,加快渲染速度。< ViewStub> 是一个不可见的,大小为0的View。

对于不常用的 UI 可以考虑使用 < ViewStub> 标签替代 GONE 来提高 UI 性能:

将 View 的可见性设置为 GONE,在 Inflate 布局时 View仍然会被 Inflate,也就是说仍然会创建对象,会被 实例化。而 ViewStud 是一个 轻量级的 View,它是一个看不见、不占布局位置、占用资源非常小的控件。

3.2 Perforjmance中的16个问题

4. 网络优化

考虑点:

重点优化优质网络下的传输速度,而不特意优化差网络下的速度;

5. apk瘦身

5.1 瘦身关键点:

Android 系统安装一个应用的过程中,其中有一步是对 Dex 进行优化,优化的过程是使用专门的工具 DexOpt。DexOpt 是在第一次加载Dex文件的时候执行的。在DexOpt的过程会生成一个ODEX文件。

早期的 DexOpt 有两个问题:

5.2 缩减方法数的方法

5.3 代码混淆

代码混淆( Obfuscated code)也叫花指令;对代码进行 Proguard 后,也可以比较大的减小代码的体积(即 dex 的体积);

6 参考文献:

1 移动App性能评测与优化

上一篇 下一篇

猜你喜欢

热点阅读