2013-08-19 72 views
1

我将20个项目(WebViews)加载到LinearLayout中,并且在加载时我显示一个ProgressBar,它隐藏了LinearLayout以向我正在工作的用户提供反馈。Android ProgressBar跳过框架

问题是进度盘冻结,我在编辑器的LogCat中发出警告,说“跳过的帧!应用程序可能在其主线程上做了太多工作。”

为了避免这个问题,我实际上试图改变使用一个LinearLayout与所有20个项目和一个适配器使用ListView。我遇到了WebView回收问题,所以我消除了回收并实际使用了20个项目的数组,每次ListView需要加载项目时,它都会从该数组中加载,如果它之前已经膨胀。

然后我陷入了无法滚动到指定项目的问题,因为ListView仅在必要时加载WebViews,因此无法计算需要完成的滚动量,因为WebViews的高度变化。

结论,我不得不回到我的LinearLayout实现,将所有WebView添加到它。

有没有解决这个问题的方法? 如果没有,我正在考虑只显示一个“正在加载...”TextView,而不是一个动画ProgressBar。

顺便说一句,有人问之前,我使用Nexus 4来测试应用程序,而不是模拟器,我没有在UI线程中进行数据库访问。

在此先感谢。

回答

1

A WebView是一个沉重而昂贵的物体,每当您将新的WebView添加到窗口时,它都必须进行初始化,测量和布局。这是什么导致你跳过帧。您可以使用traceview或systrace来查看您花费的时间。

+0

我从来没有使用这些工具,我必须今天完成应用程序,但我会学习如何使用它们,看看是否有办法改进应用程序。谢谢。 –