【问题标题】:Android: Building View with lots of elements is incredibly slow (10+ seconds)Android:构建包含大量元素的视图非常慢(10 秒以上)
【发布时间】:2011-03-18 23:32:38
【问题描述】:

首先:我最近才开始为 Android 开发,所以请不要因为我提出愚蠢/明显的问题而向我扔东西! ;D

我遇到的问题如下:我想显示一个长度未知的可点击项目列表——我的样本数据集大约是 300。 在模拟器上使用 LinearLayout 并将它们全部添加为 TextViews 需要半秒钟,这完全没问题。 为了增强用户体验,我现在用相对布局替换了线性布局,每个布局都有一个背景图像、2 个 TextView 和 3 个 ImageView。所有图像都包含在资源中,因此不会浪费下载时间或诸如此类的东西。

问题是:现在构建这个视图大约需要 10 秒,这显然不是可行的解决方案。 我的假设是完整的 UI 是完全构建的,尽管它的一部分总是可见的(使用一些滚动容器)

由于我懒得编写逻辑来手动确保只有 UI 的可见部分实际被填充,我想知道是否有人知道这个问题的一些简单的标准解决方案。

是否有一些我只需要激活的 UI 代理? 或者您会建议使用前 10 个元素创建屏幕,然后在单独的线程中将其他元素加载到后台? (不知道滚动容器 - 或者一般的 android UI - 会对此做出反应)

提前感谢所有帮助! =)

tl;博士: 构建大视图太慢了 - 需要帮助! 小狗的眼睛

【问题讨论】:

    标签: android performance rendering


    【解决方案1】:

    我想显示一个长度未知的可点击项目列表 - 我的样本数据集大约是 300

    使用ListView,或AdapterView 的任何其他子类。

    我的假设是完整的 UI 是完全构建的,尽管它始终只有一部分是可见的(使用一些滚动容器)

    这就是 AdapterView 子类(如 ListView)的用途——只为可见的内容创建小部件,而不是为整个数据模型创建小部件。

    由于我懒得写逻辑来手动确保只有 UI 的可见部分被实际填充,我想知道是否有人知道这个问题的一些简单的标准解决方案。

    使用ListView,或AdapterView 的任何其他子类。

    是否有一些我只需要激活的 UI 代理?

    没有。

    或者您是否建议使用前 10 个元素创建屏幕,然后在单独的线程中在后台加载其他元素?

    没有。主要是因为你会崩溃。您只能从主应用程序线程修改 UI,而不是您派生的后台线程。

    【讨论】:

      【解决方案2】:

      显然,马克的答案是正确的,并且您需要解决这个特定问题。

      但是,以后我建议您在下次遇到问题时快速浏览一下文档。特别是 View documentation 通常是我发现(对我而言)新的 Android 框架功能的首选页面。

      一般来说,如果您需要某样东西,并且认为这可能需要付出太多努力,但它很常见,应该已经由某人完成,我建议您采取以下步骤:

      • 打开view docs 并在“间接子类”下查找符合您需要的内容。
      • 打开 API Demos 示例应用程序,看看您是否能找到与您想要实现的目标相似的东西。它对 API 有很好的覆盖,您可以在 Sample Code 部分轻松找到代码。
      • 查看其他示例项目。该目录中有一些非常复杂的。

      当然,Stack Overflow 是一个很好的资源,但有时答案过于具体,不利于发现新功能。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-14
        • 1970-01-01
        • 2014-09-14
        • 2017-04-09
        • 1970-01-01
        • 1970-01-01
        • 2014-03-31
        • 1970-01-01
        相关资源
        最近更新 更多