优化视图

您现在已拥有一个设计精良的视图,能够响应不同的手势和切换状态,接下来要确保这个视图快速运行。为避免播放过程中出现界面响应缓慢或卡顿,需确保动画始终以每秒 60 帧的速度运行。

精简代码,降低调用频率

为了提高视图的运行速度,可从频繁调用的例程中剔除不必要的代码。首先处理 onDraw(),这将为您带来最明显的成效。尤其是应剔除 onDraw() 中的分配,因为分配可能会引起垃圾回收,从而造成卡顿。请在初始化期间或动画之间分配对象。切勿在动画运行期间进行分配。

除了精简 onDraw() 之外,还要确保尽可能降低调用它的频率。对 onDraw() 的大多数调用是由对 invalidate() 的调用引起的,因此请避免对 invalidate() 的不必要调用。

另一种成本非常高昂的操作是遍历布局。每当视图调用 requestLayout() 时,Android 界面系统都需要遍历整个视图层次结构,以确定每个视图所需的尺寸。如果发现有冲突的尺寸,可能需要多次遍历该层次结构。界面设计人员有时会创建由嵌套式 ViewGroup 对象组成的深层次结构,以便让界面正常运行。这些深层视图层次结构会造成性能问题。因此请尽可能保持较浅的视图层次结构。

如果您的界面较为复杂,可考虑编写自定义 ViewGroup 以设计布局。与内置视图不同,自定义视图可以针对子视图的尺寸和形状做出特定于应用的推断,从而避免遍历子视图以计算尺寸。PieChart 示例展示了如何扩展 ViewGroup 以作为自定义视图的一部分。PieChart 包含子视图,但从不测量它们的尺寸。而是根据自己的自定义布局算法直接设置尺寸。