【问题标题】:One large View or an array of smaller views一个大视图或一组小视图
【发布时间】:2014-09-24 08:04:15
【问题描述】:

我的应用需要一个带有重复模式的显示器。想象一个棋盘,棋子可以在一个方格内移动,但不能从一个方格移动到下一个方格。每个单元都独立于其他单元。每个单元格都有固定的大小。更大的显示器可以容纳更多的单元。一个典型的屏幕可能有一两百个这样的单元格。

每个单元格都可以是一个独立的 Java 对象,所以我最初的想法是为单元格创建一个 View 子类并将它们打包到一个 ViewGroup 中。另一方面,单元格并没有真正玩 Android 布局游戏,因为它们具有固定的像素大小,并且不能扩大或缩小它们的大小以适应不同的布局。从这个 PoV 来看,制作一个可以绘制所有这些单元格的大 View 是有意义的。然后CellArray 视图可以随着布局引擎的请求而增长和缩小。

哪种方法看起来更自然?

【问题讨论】:

    标签: android performance


    【解决方案1】:

    使用CellArray。不是因为它“更自然”(我不确定这意味着什么),而是出于技术原因。 Android 中的视图是重量级的对象,在你的活动中拥有几百个视图对于系统来说并不容易处理。 (Android lint rule for TooManyViews 会在检测到您的布局视图计数超过 ANDROID_LINT_MAX_VIEW_COUNT(默认为 80)时抱怨。您可以忽略 lint 警告,但它们通常是有充分理由的。)

    【讨论】:

    • 每次更新时只有少数单元格需要重新绘制自己是否重要?一旦大CellArray 每次都需要重绘整个屏幕。
    • @iter - 当您只需要绘制整体视图的一部分时,您可以使特定矩形无效,然后在 onDraw 中调用 getClipBounds 以查找实际需要的部分或部分画。有关示例和其他一些想法,请参见 this thread
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 2021-03-16
    • 1970-01-01
    • 2015-10-19
    相关资源
    最近更新 更多