优化自定义视图

当您拥有一个精心设计的视图,它能响应手势并在状态之间过渡时,请确保该视图运行速度快。为了避免界面卡顿或播放期间出现卡顿,请确保动画始终以每秒 60 帧的速度运行。

加速您的视图

要加速您的视图,请从频繁调用的例程中消除不必要的代码。从 onDraw() 开始,它能带来最大的回报。特别是在 onDraw() 中消除分配,因为分配可能导致垃圾回收,从而引起卡顿。在初始化期间或动画之间分配对象。绝不要在动画运行时进行分配。

除了使 onDraw() 更精简外,还要确保它尽可能少地被调用。大多数对 onDraw() 的调用都是由于调用了 invalidate(),因此消除对 invalidate() 的不必要调用。

另一个非常耗时的操作是遍历布局。当视图调用 requestLayout() 时,Android UI 系统会遍历整个视图层次结构,以确定每个视图需要多大。如果它发现测量冲突,可能会多次遍历层次结构。UI 设计师有时会创建深度嵌套的 ViewGroup 对象层次结构。这些深层视图层次结构会导致性能问题,因此请使您的视图层次结构尽可能扁平。

如果您有一个复杂的 UI,请考虑编写一个自定义 ViewGroup 来执行其布局。与内置视图不同,您的自定义视图可以对子视图的大小和形状做出特定于应用的假设,从而避免遍历其子视图来计算测量结果。

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