优化自定义视图

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

加快观看速度

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

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

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

如果您的界面较为复杂,可考虑编写自定义 ViewGroup 以设计布局。与内置视图不同,自定义视图可以针对子视图的尺寸和形状做出特定于应用的推断,从而避免遍历子视图以计算尺寸。

例如,如果您有一个自定义 ViewGroup,它不会调整自身大小以适应所有子视图,那么您可以避免测量所有子视图的开销。如果您使用可满足各种使用情形的内置布局,则无法进行此优化。