我正在将二十个项目(WebViews)加载到LinearLayout中,当它们正在加载时,我正在显示一个ProgressBar,它隐藏了LinearLayout以向用户提供我正在工作的反馈。
问题是进度轮冻结了,我在Chocographer的LogCat中收到警告说“跳过帧!应用程序可能在其主线程上做了太多工作。”
为了避免这个问题,我实际上试图改变使用所有20个项目的LinearLayout并使用带适配器的ListView。我遇到了WebView回收问题,因此我取消了回收并实际使用了20个项目的数组,每次ListView需要加载项目时,如果之前已经充气,它将从该数组加载。
然后我遇到了无法滚动到指定项目的问题,因为ListView仅在必要时加载WebView,因此无法计算需要完成的滚动量,因为WebView的高度不同
结论,我必须回到我的LinearLayout实现,将所有WebView添加到它。
这个问题有解决方法吗? 如果没有,我正在考虑只显示“正在加载...”TextView而不是动画ProgressBar。
顺便说一下,在有人要求之前,我正在使用Nexus 4来测试应用程序,而不是模拟器,而且我没有在UI线程中进行数据库访问。
提前致谢。
答案 0 :(得分:1)
WebView
是一个沉重且昂贵的对象,每次向窗口添加新的WebView
时,都必须对其进行初始化,测量和布局。这就是导致你跳过帧的原因。您可以使用traceview或systrace进行检查,看看您花时间在哪里。