影响性能的点

响应时间:数据的网络传输时间 + 页面的响应时间
系统处理能力:当前的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.代码优化

  1. 数据结构使用
  • 如果使用List,建议使用ArrayList
  • 如果使用的Map的key为int型,建议使用Android提供的SparseArray
  • 如果内存紧张,建议使用WeakHashMap
  • 如果不想添加重复元素,建议的使用HashSet,并且HashSet的查询效率也比较高
  • 如果多线程使用Map,建议使用ConcurrentHashMap
  1. 避免创建不必要的对象
  • 对象频繁的创建和销毁,对内存使用率会很高,容易造成应用程序卡顿
  1. 合理使用static
  • 常量字段要声明为“static final”
  • 不要将视图控件声明为static,因为View对象会引用Activity对象,当Activity退出时其对象本身无法被销毁,会造成内存溢出
  1. 避免使用内部的setter/getter方法
  • 除了外部访问,内部访问尽量避免使用setter/getter方法
  1. 避免使用浮点数,能用整形,尽量用整形
  • As a rule of thumb, floating-point is about 2x slower than integer on Android-powered devices.
  1. 集合循环尽量使用for each
  2. 尽量使用jdk或android sdk提供的函数,实现所需功能

4.其他优化

  1. 逻辑优化
  • 理清程序的逻辑,避免不要的操作
  1. 需求优化
  2. 处理优化
  • 异步,多线程
  • 提前或延迟操作

5.优化工具

  1. 布局优化 — HierarchyViewer
  2. 内存优化 — Mat
  3. 性能优化利器 — Traceview

性能优化的思考

性能优化是一个特大的话题,而且是一个持续的过程。
如何避免出现性能问题,需要在根据场景去做合理的设计和编码。
出现性能问题后,性能优化这个应该需要同学们能掌握基本的处理技巧,时时的去做优化,让应用成为一个真正的好应用。