我正在开发一个名为Lightning Browser的开源浏览器,并且我遇到了有关Android(4.2.2)的最新更新的一些问题。WebView无法呈现,直到触及Android 4.2.2
在视图被触摸之前,WebViews将无法完全呈现。它只发生在最新的Android版本上。在4.2.1上,WebView呈现完全正常。我使用Nexus 7进行开发,在我收到4.2.2更新后,浏览器停止了渲染。其他用户也经历过这种情况,并且仅在4.2.2上多次确认。它正在针对API级别16和17发生,但是我看到了一个WebKit浏览器,其目标是API级别9,而没有此问题。
我试图用这个解决方案来解决这个问题,我在Stack Overflow(Android WebView renders blank/white, view doesn't update on css changes or HTML changes, animations are choppy)上发现了这个问题。但是,将WebView的RenderPriority设置为较高并不能解决这个问题......让它无需触摸即可呈现的唯一方法是将invalidate()命令放入WebView的OnDraw()方法中。这会导致WebView不断重新绘制。这可以工作(有点),动画很流畅,页面加载非常快,但是会导致WebView的性能下降。
我也看到了这个问题(与我的非常相似),但没有好的答案。 Android WebView Fails to Completely Render Content Until User Interaction
性能下降,我的意思是输入。文本输入滞后,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上提出的第一个问题,所以如果我不清楚或者我做错了什么,请原谅我。
编辑: 我发现这个问题here关于类似的问题,它被解决了,问题是,我不明白答案甚至意味着什么。如果有人能够启发我,这可能会有所帮助。
我得到这个错误的logcat
E/chromium(1243): external/chromium/net/disk_cache/backend_impl.cc:2022: [0705/172030:ERROR:backend_impl.cc(2022)] Corrupt Index file
这个问题与我们的问题没有关系,页面是空白的,但是因为加载它有异国情调的问题,与渲染管道无关。 – rupps 2013-05-09 23:28:17
顺便说一句...在我的情况下,键盘/输入性能是如此糟糕(并且随着页面复杂度的增加而下降),我选择JQuery在运行时,在选择HTML输入时触发本地输入重叠。它不是很优雅,但本机输入完美地工作,文本选择/剪切/粘贴并不令人沮丧... – rupps 2013-05-09 23:46:31
替代不会降低性能http://stackoverflow.com/a/19253633/236743 :) – Dori 2013-10-08 16:49:11