Android:具有大量元素的构建视图非常慢(10秒以上)

时间:2011-03-18 23:32:39

标签: android performance rendering

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

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

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

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

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

提前感谢您的帮助! =)

TL; DR: 构建大视图的方式太慢 - 需要帮助! 小狗的眼睛

2 个答案:

答案 0 :(得分:4)

  

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

使用ListViewAdapterView的任何其他子类。

  

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

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

  

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

使用ListViewAdapterView的任何其他子类。

  

我是否需要激活某种UI代理?

没有

  

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

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

答案 1 :(得分:1)

显然,马克的回答是正确的,以及你需要解决这个特殊问题的方式。

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

一般来说,如果你需要一些东西并且认为它可能需要付出太多努力,但是它已经被某人已经完成了,我推荐这些步骤:

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

当然,Stack Overflow是一个很好的资源,但有时答案太具体了,不适合发现新功能。