欢迎参加我们将于 6 月 3 日举行的 #Android11:Beta 版发布会

优化视图

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

精简代码,降低调用频率

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

除了精简 onDraw() 外,还要确保尽可能降低调用它的频率。大多数 onDraw() 调用是因为调用 invalidate() 而引起的,因此请减少不变要的 invalidate() 调用。

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

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