gpt4 book ai didi

android - WebView 在触摸 Android 4.2.2 之前无法呈现

转载 作者:IT老高 更新时间:2023-10-28 22:22:37 32 4
gpt4 key购买 nike

我正在开发一款名为 Lightning Browser 的开源浏览器,但在最近更新到 Android (4.2.2) 时遇到了一些问题。

在触摸 View 之前,WebViews 将无法完全呈现。它仅发生在最新的 Android 版本上。在 4.2.1 上,WebView 渲染得非常好。我使用 Nexus 7 进行开发,在收到 4.2.2 更新后,浏览器立即停止渲染。其他用户也遇到过这种情况,并且多次确认仅在 4.2.2 上发生。它正在针对 API 级别 16 和 17 发生,但我已经看到针对 API 级别 9 的 WebKit 浏览器没有这个问题。

我已尝试使用我在 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

最佳答案

所以我终于找到了导致 WebView 不呈现的问题。我正在我的 WebView 的 WebViewClient 内启动和停止可绘制的动画。这个drawable只是一个在页面加载时旋转的刷新按钮......简单吧?

在浏览器的非全屏模式下,旋转的drawable和WebView都是同一个父级的子级,而在全屏模式下,drawable成为WebView的子级。不知何故,通过在页面加载时启动动画并在完成时(全屏)停止动画,应用程序决定旋转可绘制对象需要所有绘图能力,而 WebView 从不绘制。当处于全屏模式并且drawable成为WebView的子级时,WebView的渲染优先级高于drawable并且可以正常绘制。

这个故事的寓意是...... WebViews 喜欢成为要绘制的最高优先级的 View 。如果有其他 View 获得更高的优先级,它们将无法正确绘制。

我不是动画方面的专家,所以我现在需要重新考虑如何为可绘制对象设置动画,以免中断 WebView。

希望这是有道理的。感谢阅读。

关于android - WebView 在触摸 Android 4.2.2 之前无法呈现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15127762/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com