影响性能的点
响应时间:数据的网络传输时间 + 页面的响应时间
系统处理能力:当前的CPU,内存占用情况
性能优化方法
降低页面响应时间的主要手段:a.缓存,b.算法优化, c.逻辑优化, d.需求优化, e.布局优化,f.动画优化
同步改异步:把耗时操作放到其他工作线程
提前或延迟操作:使用handler.post(),handler.postDelayed(),view.post(),view.postDelayed()等进行操作延迟或提前
1. 布局优化---减少不必要的布局嵌套或过多的节点
- <include>标签
- <merge> 标签
- 第一次不需要显示的view,设置view为Gone
- 使用RelativeLayout代替LinearLayout
- view的adapter里,使用viewholder和全局的变量,防止多次inflate
- ListView一定要给高度,使用xxdp或fill_parent
2. 动画优化
- 尽量减少在动画中做布局重绘,避免使用requestLayout(),invalidate(),postInvalidate()
- 尽量使用AnimationListener,以便控制在动画开始或结束后操作
- 连续动画,尽量使用ObjectAnimator
3.代码优化
- 数据结构使用
- 如果使用List,建议使用ArrayList
- 如果使用的Map的key为int型,建议使用Android提供的SparseArray
- 如果内存紧张,建议使用WeakHashMap
- 如果不想添加重复元素,建议的使用HashSet,并且HashSet的查询效率也比较高
- 如果多线程使用Map,建议使用ConcurrentHashMap
- 避免创建不必要的对象
- 对象频繁的创建和销毁,对内存使用率会很高,容易造成应用程序卡顿
- 合理使用static
- 常量字段要声明为“static final”
- 不要将视图控件声明为static,因为View对象会引用Activity对象,当Activity退出时其对象本身无法被销毁,会造成内存溢出
- 避免使用内部的setter/getter方法
- 除了外部访问,内部访问尽量避免使用setter/getter方法
- 避免使用浮点数,能用整形,尽量用整形
- As a rule of thumb, floating-point is about 2x slower than integer on Android-powered devices.
- 集合循环尽量使用for each
- 尽量使用jdk或android sdk提供的函数,实现所需功能
4.其他优化
- 逻辑优化
- 理清程序的逻辑,避免不要的操作
- 需求优化
- 处理优化
- 异步,多线程
- 提前或延迟操作
5.优化工具
- 布局优化 — HierarchyViewer
- 内存优化 — Mat
- 性能优化利器 — Traceview
性能优化的思考
性能优化是一个特大的话题,而且是一个持续的过程。
如何避免出现性能问题,需要在根据场景去做合理的设计和编码。
出现性能问题后,性能优化这个应该需要同学们能掌握基本的处理技巧,时时的去做优化,让应用成为一个真正的好应用。