2011-03-22 72 views
0

我有12个spinners的工作活动链接到超过20,000条记录的单个数据库表。每个微调控制器绑定到不同的查询以使选择动态化(基于之前的选择)。该代码可以工作,但由于数据库中查询的数量和表的大小,我的性能非常糟糕。初始布局需要20多秒才能加载。这是因为第一个微调器在布局期间被设置为初始选择,导致其他11个微调器也填充。使用旋转器时性能也受到影响。如果我去改变第一个选择,所有其他微调器都需要大约10秒钟来更新。提高微调器性能

我应该从哪里开始寻找更好的性能?数据库表?查询?或者我应该避免使用12个纺纱厂?

回答

0

随着您应该可能考虑去钻下拉列表中,许多选项。这将允许您分解查询(每个活动一个),并且还将允许当前列表占用整个屏幕。这样,您还可以为用户提供一种过滤当前列表的方法,如果您有很多选项,则该列表可能是必需的。

另外:

  • 设置你的布局,然后再开始加载数据。至少在用户等待时出现这种情况。
  • 做在的AsyncTask /线程所有长时间运行的工作,以避免阻塞UI线程
  • 确保你有你的数据库表和查询​​主索引使用这些在可能的情况
  • 不要一次加载所有数据,只需执行每个查询根据需要
+0

我想标记两个答案是正确的,因为我使用两个想法。我确实找到了一种更有效的索引列的方法,这有助于我在布局上启用所有的spinners。谢谢! – Eric 2011-03-24 19:36:04

1

这听起来像你不拖延UI线程,所以这很好。 您可以创建索引来加速数据库,但是您可能会通过分割查询而不是一次完成所有查询来获得最大的性能提升。因此,第一个Spinner将是Activity启动时唯一启用的控件。进行选择将激发第二个微调器的查询并启用该选项,依此类推。

有这个(1小时)视频了很多有用的东西表现: http://www.google.com/events/io/2010/sessions/writing-zippy-android-apps.html