如何暂停布局绘制?
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 也可能值得您研究一下。
在 .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()
.
膨胀和填充新布局,然后交换它们,而不是更新可见布局可能会更好。然后,您可以回收一组视图,即,维护的视图数量是显示的视图的两倍。这正是 RecyclerView (see also "Creating a List with RecyclerView").
的重点Live data 也可能值得您研究一下。