1

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

问题是进度轮冻结,并且我在 Choreographer 的 LogCat 中收到警告说“跳过帧!应用程序可能在其主线程上做了太多工作。”

为了避免这个问题,我实际上尝试从使用带有所有 20 个项目的 LinearLayout 和使用带有 Adapter 的 ListView 进行更改。我遇到了 WebView 回收问题,所以我消除了回收并实际使用了一个包含 20 个项目的数组,每次 ListView 需要加载一个项目时,如果它之前已经膨胀,它就会从该数组加载。

然后我遇到了无法滚动到指定项目的问题,因为 ListView 仅在必要时加载 WebView,因此由于 WebView 的高度不同,它无法计算需要完成的滚动量。

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

这个问题有解决方案吗?如果没有,我正在考虑只显示“正在加载...”TextView 而不是动画进度条。

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

提前致谢。

4

1 回答 1

1

AWebView是一个沉重而昂贵的对象,每次你WebView在窗口中添加一个新对象时,都必须对其进行初始化、测量和布局。这就是导致您跳帧的原因。您可以使用 traceview 或 systrace 来查看您在哪里花费时间。

于 2013-08-19T18:26:03.497 回答