优化自定义视图

如果您有一个精心设计的视图可以响应手势和状态之间的转换,请确保该视图快速运行。为避免播放过程中界面响应缓慢或卡顿,请确保动画始终以每秒 60 帧的速度运行。

加快观看速度

为了提高视图的运行速度,可从频繁调用的例程中剔除不必要的代码。从 onDraw() 开始,这将为您带来最大的回报。特别是应消除 onDraw() 中的分配,因为分配可能会导致垃圾回收,从而造成卡顿。请在初始化期间或动画之间分配对象。切勿在动画运行期间进行分配。

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

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

如果您的界面比较复杂,不妨考虑编写自定义 ViewGroup 来执行其布局。与内置视图不同,自定义视图可以对其子项的尺寸和形状做出特定于应用的假设,从而避免遍历其子项以计算测量值。

例如,如果您有一个自定义 ViwGroup,它不通过调整自身大小来适应其所有子视图,就可以避免测量所有子视图所产生的开销。如果您使用适合各种用例的内置布局,则无法进行此优化。