如何暂停布局绘制?

How do I suspend layout drawing?

在 .NET 下,您可以调用 SuspendLayout() / ResumeLayout()。

在Android下是否有等效项?

我的原因是...我有一个 RelativeLayout 最多包含 64 个 "panels"(另一个 RelativeLayout 有 3 个 TextView children)。

通过串行通信 link,我收到一条 XML 消息,描述要显示的面板数量、它们的大小以及每个可见面板的 3 个文本视图中要放置的内容.

初始代码一切正常,我可以显示一页面板。

然而,当我收到一条新的 XML 消息时,我隐藏了所有面板,re-position 那些在新的 XML 消息中定义的面板,更新每个面板的 3 个文本视图,以及然后显示 in-use 个面板。

再次,这有效,但是当所有面板都隐藏时页面变为空白(可能 1-2 秒),然后所有新面板出现。

我猜 hiding/showing 面板是一个相对较快的过程,但是解码 XML 和更新面板 text/font/colour/etc 在面板得到 re-enabled.

我想知道如何在更新 top-level RelativeLayout 时 "suspend" 绘图过程,然后在初始化所有视图后 "resume" 绘图。

有办法吗?

还是我从错误的角度来看待这整件事? 如果是这样,最好的尝试方法是什么?

---更新---

好吧,似乎我有点早熟,因为我在我的代码中发现 "quirk" 导致了 1-2 秒的延迟(un-handled XML 消息)。

但感谢您花时间给我一些指点。无聊的时候读点书!!

您应该做的第一件事是弄清楚您可以将多少工作委托给后台线程(例如,"decoding the XML")。然后,您可以使用 Looper.getMainLooper().

安全地更新 UI

膨胀和填充新布局,然后交换它们,而不是更新可见布局可能会更好。然后,您可以回收一组视图,即,维护的视图数量是显示的视图的两倍。这正是 RecyclerView (see also "Creating a List with RecyclerView").

的重点

Live data 也可能值得您研究一下。