优化View
现在你已经有了一个设计得还算不错的view了,具体来说,会在状态改变之间使用手势和转换进行回应,确保了view可以运行得很有效率。为了防止UI在重放的时候感觉缓慢,不流畅,你需要确保动画能保证运行在一秒60帧。
做少一些,频率不要太频繁
为了让你的view提速,要在调用比较频繁的步骤中减少不必要的代码。要从onDraw()
开始这一优化,这一步骤将会是最大的性能开销。你应该尽量减少在onDraw()
中的分配。因为分配将会导致GC垃圾回收,而这进一步将会使你的view看起来很缓慢。在初始化的时候去分配,或者在动画之间也可以。永远也不要在动画运行期间去分配。
为了让onDraw()
更加轻量级一些,也需要保证它尽量不会那么频繁调用,大多数的onDraw()
调用都是调用了invalidate()
的结果,因此应当尽量减少不要要的invalidate()
。
另一个 非常大的开销是遍历layouts。一个view在任何时间调用requestLayout()
,Android的UI西永都会遍历整个view树去确认每一个view需要多大。如果它发现了冲突的测量,它就会遍历view树多次。UI设计者有时会创建很深的view层次来让view工作得正常。这些很深的view层次将会导致性能问题。你需要尽量让你的view层次浅一些。
假如你需要一个复杂的UI,那么考虑一些一个自定义的Viewgroup
来执行它的layout。不像内建的views那样,你的自定义view能够针对你特定的应用做一些优化。因此可以避免遍历它的孩子的测量计算。PieChart 这个例子展示了如何去继承ViewGroup
作为自定义的一部分。PieChart 有子view,但是它却永远不会去测量它们,相对地,它通过自定义的算法来立即设定子views的大小。