我正在开发一个具有大量自定义 View 的应用程序,并遇到了其中一个非常复杂的性能问题。他们测量和绘图所用的时间太长(>= 30ms 典型)。提供更多详细信息:这是一个自定义 ViewGroup
(扩展 RelativeLayout
),带有自定义 View (尽管扩展 RelativeLayout
),因为它是子项。
所以我想到了摆脱这种性能问题的更好/更快的方法是什么:优化子项和布局或切换到完全自定义的绘制 View (线条、矩形和类似的东西)?
你们中有人有这方面的经验吗?或者甚至有些人做了一些基准测试并愿意分享它们?
最佳答案
简单的方法是简化和扁平化当前的 View 层次结构,也许您可以使测量和绘图过程更便宜(或至少体面)。你没有发布布局所以没有什么具体要说的,我看到你在 RelativeLayouts
中提到了 RelativeLayouts
,也许你可以删除一个并将 View 上移一层(即使增加其他辅助 View 的费用也是如此) , 每个级别都很重要(尤其是嵌套 RelativeLayouts
)。您可能已经知道,但是布局中的 merge
和 include
标签可能非常有用。
标准 SDK 中的 RelativeLayout
是作为通用小部件构建的,因此它很可能无法实现自定义设计布局的性能。使您当前的布局扩展 RelativeLayout
以扩展 ViewGroup
并手动实现子项的测量和布局会更有意义,特别是因为您可能知道应用程序中的用例场景(例如 RelativeLayout
总是需要处理所有大小约束在这种情况下,如果您知道自定义 View 将具有特定大小,则另一方面,您的自定义布局可以更快地处理此问题)。
与完全自定义的绘制 View 相关,这是一个选项,但取决于布局的复杂性。
我看不出各种 View 基准(很可能不适用于您的特定情况)会有什么帮助。