gpt4 book ai didi

android - 应对 Android 上的复杂布局

转载 作者:行者123 更新时间:2023-11-29 14:07:13 27 4
gpt4 key购买 nike

我们有一个数据驱动的 Activity ,它构建了一大组(通常最多 100 个)类似按钮的组件,并将它们放在一个 Scrollable 中。每个按钮都是从资源中膨胀的,并且基于 RelativeLayout。该按钮有两个 TextView 、两个 ImageView - 均来自资源 - 并且具有 9 色补丁的背景。

ImageView 的大小、位置、文本和配置均由数据库查询驱动。

不幸的是,在 HTC Desire 上布局需要 2-3 秒,在 HTC San Francisco 或 HTC Sapphire 上需要 3-5 秒。

完成初始布局后, View 会表现得很漂亮。

我们已经尝试了很多策略,但都没有效果:

  • 数据库查询时间 - 这不是延迟的重要部分。
  • 缓存按钮,以减少布局膨胀量。
  • 在“实时” View 层次结构之外构建 View 子树,然后在完成后连接它。
  • 在另一个线程上执行相同的操作,但将子树连接到 UI 线程上的 Activity 。

我们有一个不确定的进度指示器(spinner/throbber),它在查询在另一个线程上运行时旋转,但在布局开始时停止。

所以,我的问题是:

  • 如何使 View 的布局看起来响应更快
  • 如何避免 thobber 在布局发生时锁定

谢谢。

编辑

滚动条设置为水平和垂直滚动。所以我们有一个网格,屏幕是一个视口(viewport)。

这使得使用内置的 ListView(乍一看)不适合该任务。

最佳答案

进度指示器不会在布局期间重绘,因为这一切都发生在 UI 线程中。

要提高性能,您应该使用 ListView,它是可滚动的,并且可以使用自定义适配器自定义项目(您可以重用基于 RelativeLayout 的“按钮”),它允许在滚动时回收项目。参见 Recycling views in a listview, worth it? ,最重要的是 excerpt from CommonsWare's book on Android .

关于android - 应对 Android 上的复杂布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6131481/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com