当您拥有一个响应手势并在状态之间转换的精心设计的视图时,请确保该视图运行速度很快。为避免在播放过程中出现迟钝或卡顿的 UI,请确保动画始终以每秒 60 帧的速度运行。
加快视图速度
要加快视图速度,请从频繁调用的例程中消除不必要的代码。从 onDraw()
开始,这将为您带来最大的回报。特别是,消除 onDraw()
中的分配,因为分配可能会导致垃圾回收,从而导致卡顿。在初始化期间或动画之间分配对象。切勿在动画运行时进行分配。
除了使 onDraw()
更精简之外,还要确保尽可能少地调用它。大多数对 onDraw()
的调用都是对 invalidate()
的调用的结果,因此请消除对 invalidate()
的不必要调用。
另一个非常昂贵的操作是遍历布局。当视图调用 requestLayout()
时,Android UI 系统会遍历整个视图层次结构以查找每个视图需要多大。如果它发现冲突的测量值,它可能会多次遍历层次结构。UI 设计师有时会创建嵌套 ViewGroup
对象的深度层次结构。这些深度视图层次结构会导致性能问题,因此请使您的视图层次结构尽可能浅。
如果您有一个复杂的 UI,请考虑编写自定义 ViewGroup
来执行其布局。与内置视图不同,您的自定义视图可以对子视图的大小和形状进行特定于应用程序的假设,因此可以避免遍历其子视图来计算测量值。
例如,如果您有一个不会调整自身大小以适应其所有子视图的自定义 ViwGroup
,则可以避免测量所有子视图的开销。如果您使用满足各种用例的内置布局,则无法进行此优化。