我正在开发一个名为 Lightning Browser 的开源浏览器,但在最近更新到 Android (4.2.2) 时遇到了一些问题。
在触摸视图之前,WebView 将无法完全呈现。它仅发生在最新的 Android 版本上。在 4.2.1 上,WebView 渲染得非常好。我使用 Nexus 7 进行开发,在收到 4.2.2 更新后,浏览器立即停止渲染。其他用户也遇到过这种情况,并且多次确认仅在 4.2.2 上发生。它正在针对 API 级别 16 和 17 发生,但我已经看到针对 API 级别 9 的 WebKit 浏览器没有这个问题。
我试图使用我在 Stack Overflow 上找到的问题的解决方案来解决这个问题(Android WebView 呈现空白/白色,视图不会在 css 更改或 HTML 更改时更新,动画不连贯)。但是,仅将 WebView 的 RenderPriority 设置为高并不能解决它......让它在不被触摸的情况下呈现的唯一方法是将 invalidate() 命令放在 WebView 的 OnDraw() 方法中。这会导致 WebView 不断地重新绘制。这可行(有点),动画很流畅,页面加载非常快,但否则会导致 WebView 的性能下降。
我也看过这个问题(与我的非常相似),但没有很好的答案。在用户交互之前,Android WebView 无法完全呈现内容
性能下降,我的意思是输入。文本输入滞后,WebView 本身无法像以前那样处理正在发生的事情。使用 invalidate() 方法调用对浏览器进行基准测试会使基准测试性能下降约 8%。我知道基准测试并不是万能的,但它告诉我连续绘图正在使系统紧张并导致系统忽略其他任务。
结论... Android 4.2.2 中的 WebView 在触摸之前不会呈现。我知道解决此问题的唯一方法是在 WebView 的 onDraw() 方法中调用 invalidate()。这对性能不利,我正在寻找一种不同的方法来解决这个问题。
魔法密码(我目前正在使用)...
class MyWebView extends WebView
{
@Override
onDraw(Canvas canvas)
{
invalidate();
super.OnDraw(canvas);
}
}
消除
invalidate();
并且在触摸之前它不会渲染。
有没有人对如何使 WebView 渲染有建议(除了我所做的)?顺便说一句,这是我在 Stack 上提出的第一个问题,如果我不清楚或者我做错了什么,请原谅我。
编辑:我在这里发现了这个关于类似问题的问题,并且已经解决,问题是,我什至不明白答案的含义。如果有人能启发我,它可能会有所帮助。
我在 logcat 中收到此错误
E/chromium(1243): external/chromium/net/disk_cache/backend_impl.cc:2022: [0705/172030:ERROR:backend_impl.cc(2022)] Corrupt Index file