【发布时间】:2013-08-04 15:39:09
【问题描述】:
我正在使用 WebView 包装 Android 应用程序,它需要呈现 HTML5 画布。它在我所有的设备上都能完美运行,除了一个。我的 Galaxy S4 (4.2.2) 正在闪烁画布,然后它很快变成灰色。这是它产生的 logcat 消息:
D/GestureDetector(20071):[表面触摸事件] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 7 mFalseSizeCnt:0
V/WebViewInputDispatcher(20071): 块WebkitDraw
V/WebViewInputDispatcher(20071): blockWebkitDraw 锁定假
D/webview(20071): blockWebkitViewMessage= false
我单击一个按钮,然后应该渲染画布。这就是为什么第一个日志项是针对表面触摸事件的。当我直接使用 webkit 浏览器 ping 我的应用程序时,它可以在我的 S4 上运行,但是当我自己包装它或使用 Cordova 时会给我这个错误。我添加了两个屏幕截图以进一步显示该问题。第一个渲染正确,第二个是问题。
Android 2.3.6:
安卓:4.2.2:
回到我的问题。这条消息是怎么回事?有人对如何正确渲染画布有任何建议吗?
【问题讨论】:
-
您有没有尝试过几个不同的网页,看看是什么网页导致了这种情况,还是每个网页都如此?
-
表示webkit阻塞绘图线程unitl dispatch事件完成。
-
只有在 Android 4.2+ 设备上启用硬件加速时才会发生这种情况。有没有办法让它在不禁用加速的情况下不阻止它?阻止事物会导致动画和实时触摸事件出现问题,但如果没有加速,事物往往会运行得不太顺畅。
-
@Josh:有什么解决方案或解决方法吗?
-
仍然没有弄清楚 blockWebkitDraw 正在做什么或意味着什么,但我们的问题似乎来自 webviews 处理 html 溢出的糟糕(或者说不是)处理。特别是任何类型的溢出-x 都会导致事情变得混乱。它在 Android 4.4 中处理得更好。
标签: android webkit html5-canvas