Contenu connexe Similaire à 移动开发的性能优化 (20) 移动开发的性能优化1. 移动开发性能优化
西安极客软件科技有限公司
王凯强
Guaiss.Wang@gmail.com
Confidential All rights reserved
2. 内容
对安卓平台分析
一些性能优化的手段
简介性能优化的工具
Confidential All rights reserved
3. 用户体验导向
快速
流畅
省电
Confidential All rights reserved
5. NDK?
通用性 - ARM平台 Intel平台
可以使用某些C++库 如UDT
与Native method有链接时间,并不一定提速
注意释放
Confidential All rights reserved
7. 一些性能优化的方法
即时编译技术 Android2.2+
有无JIT的设备间也存在着巨大差异,在JIT设备上好的代码有时候会在无JIT的设备
上表现的并不好。
如果你想知道一个程序在设备上的具体表现,就必须在上面进行测试。
在没有JIT的设备上,调用方法所传递的对象采用具体的类型而非接口类型会更高效(
比如,传递HashMap map比Map map调用一个方法的开销小,尽管两个map都是
HashMap).事实上,他们只相差6%,而有JIT时这两种调用的效率不相上下。
在没有JIT的设备上,缓存后的字段访问比直接访问快大概20%。而在有JIT的情况下
,字段访问的代价等同于局部访问,因此这里不值得优化,除非你觉得他会让你的代码
更易读(对于final ,static,及static final 变量同样适用)
Confidential All rights reserved
8. 一些性能优化的方法
避免创建不必要的对象
当从输入的数据集合中读取数据时,考虑返回原始数据的子串,而非新建一个拷贝
将多维数组切割成平行一维数组
...
用静态代替虚拟
调用会加速15%到20%
避免内部Getters/Setters
与C++的习惯不同 虚方法调用的代价比直接字段访问高昂许多
使用Static Final修饰常量
合理利用浮点数
比整型慢两倍
了解并使用类库 com.google.common
使用For each
用于实现了iterable接口的集合类及数组中
Confidential All rights reserved
9. 一些性能优化的方法
zero()是当中最慢的,因为对
于这个遍历中的历次迭代,
JIT并不能优化获取数组长度
的开销。
One()稍快,将所有东西都放
进局部变量中,避免了查找。
但仅只有声明数组长度对性能
改善有益。
Two()是在无JIT的设备上运
行最快的,对于有JIT的设备
则和one()不分上下。他采用
了JDK1.5中的改进for循环语
法。
Confidential All rights reserved
12. 布局XML优化
Java处理效率比XML快得多 $ layoutopt samples/
samples/compound.xml
UI与逻辑的分离是很重要的
7:23 The root-level
<FrameLayout/> can be replaced
with <merge/>
11:21 This LinearLayout layout or
Layoutopt its FrameLayout parent is useless
Layoutopt <list of xml files or directories> samples/simple.xml提示未使用到该布
局
7:7 The root-level
<FrameLayout/> can be replaced
with <merge/>
samples/too_deep.xml
-1:-1 This layout has too many
nested layouts: 13 levels, it should
have <= 10!
Hierarchy Viewer 层级观察器 20:81 This LinearLayout layout or
显示控件的节点的测量(measure)、 its LinearLayout parent is useless
布局(layout)以及画视图(draw)的时间 24:79 This LinearLayout layout or
its LinearLayout parent is useless
Confidential All rights reserved
14. 文件大师的插件产品
插件系统
缓存清理
内存管理
文件加密
文字加密
号码百事通
... ...
Confidential All rights reserved
15. 测试Android软件性能主要方法
在模拟器上的Dev Tools可以激活屏幕显示当前的FPS,CPU使用率,可以帮助我们
测试一些3D图形界面的性能。
一般涉及到网络应用的程序,在效率上和网速有很多关系,这里需要多次的调试才能
实际了解。
对于逻辑算法的效率执行,最普遍的,计算执行时间来查看
GC效率跟踪,如果你执行的应用比较简单,可以在DDMS中查看下Logcat的VM释放
内存情况,大概模拟下那些地方可以缓存数据或改进算法的。
线程的使用和同步,Android平台上给我们提供了丰富的多仸务同步方法,对于线程
和堆内存的查看这些都可以在DDMS中看到。
Confidential All rights reserved
19. Exclusive: 同级函数本身运行的时间
Inclusive 就是说除统计函数本身运行的时间外再加上调用子函数所运行的时间。
Name:列出的是所有的调用项,前面的数字是编号,展开可以看到有的有Parent
和Children子项,就是指被调用和调用。
Incl: inclusive时间占总时间的白分比
Excl: 执行占总时间的白分比。
Calls+Recur Calls/Total: 调用和重复调用的次数
Time/Call: 总的时间。(ms)
根据Taceview的数据作出更改后,
请确保代码在没有Traceview时,确实跑的快了!
Confidential All rights reserved
20. 其他
分析内存使用情况的工具
Allocation Tracker
Heap Dumps
...
Confidential All rights reserved