2013-08-03 47 views
17

我正在用一个WebView封装一个Android应用程序,它需要渲染一个HTML5画布。它适用于我的所有设备,除了一个。我的Galaxy S4(4.2.2)正在闪烁画布,然后很快变成灰色。下面是它的制造logcat的消息:blockWebkitDraw是什么意思,以及如何解决它?

d/GestureDetector(20071):[表面触摸事件] mSweepDown假, mLRSDCnt:-1 mTouchCnt:7 mFalseSizeCnt:0

V/WebViewInputDispatcher(20071) :blockWebkitDraw

V/WebViewInputDispatcher(20071):blockWebkitDraw lockedfalse

d /网页视图(20071):blockWebkitViewMessage =假

我点击一个按钮,然后画布应该呈现。这就是为什么第一个日志项目用于表面触摸事件。它可以在我的S4上运行,当我直接使用webkit浏览器对我的应用程序进行ping操作时,但是当自己使用或者使用Cordova进行打包时,会给我那个错误。我添加了两个屏幕截图来进一步显示问题。第一个是正确渲染,第二个是问题。

的Android 2.3.6:

enter image description here

安卓4.2.2:

enter image description here

所以,回到我的问题。这个消息是怎么回事?有没有人对如何正确渲染画布有任何建议?

+0

您是否尝试过几个不同的网页,看看它是什么网页,是造成这还是每个网页? –

+0

这意味着webkit阻塞绘制线程单元调度事件完成。 – 2013-10-03 18:11:13

+0

只有在Android 4.2及更高版本的设备上启用硬件加速才会发生。有没有办法阻止它没有禁用加速?阻塞事物会导致动画和实时触摸事件的问题,但没有加速度时,事情往往会不太顺畅。 – Josh

回答

1

我做了一些粗略的浏览WebView和WebViewInputDispatcher类,但没有提出任何东西。也许你可以看看那里。

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/webkit/WebView.java http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.2.2_r1/android/webkit/WebViewInputDispatcher.java

我的想法是,也许你可以准确判断发生阻塞,并可以扩展这些类或创建自己的副本并对其进行修改。

1

我在Galaxy Tab 2上测试时遇到了一个非常类似的问题。在我的情况下,我有一个简单的超链接,而不是一个按钮,但问题是一样的。这是我发现的:

无论我是否点击按钮或链接,每次触摸屏幕时,控制台中带有标记WebViewInputDispatcher和值blockWebkitDraw lockedfalse的错误消息都会出现。因此,此错误消息与onTouch事件相关,而不是像您预期的那样点击按钮。

当最初通过点击我的一个链接进行测试时,我原本以为Galaxy Tab阻止了我的链接。事实证明,Galaxy Tab 2对点击行为非常不敏感,所以当我以为我点击链接时,我实际上已经错过了。通过点击比我认为必要的稍高,我能够激活我的链接。

为了验证我的怀疑,我大大增加了我的链接的字体大小。通过更大的链接,我可以在第一次尝试中成功点击链接,现在我的应用按预期执行。我强烈怀疑如果你只是让你的按钮更大,你就可以成功地点击它。

2

我能够在Android清单文件我的最低SDK版本设置为14来解决这个问题:

<uses-sdk android:minSdkVersion="14" /> 

在第14版,邮件仍然会出现在日志中,但是触摸事件被处理。当我将minSdkVersion设置回来时,不会处理触摸事件。关闭清单中的硬件加速以及各种CSS webkit样式都没有帮助。只有minSdkVersion设置为我解决了它。

不知何故,对Galaxy Tab的,对于旧版本的SDK支持导致与JavaScript的触摸事件的处理问题,而触摸移动正在发生blockWebkitDraw保持真实。这可以防止我的画布代码接收touchmove事件并执行绘制。当我设置的SDK版本14,blockWebkitDraw被设置为true时,触摸事件触发,但触摸处理后没有设置,并在画布代码来绘制被调用。

1

我对银河S3类似的问题。我在这个答案中找到了解决方案:https://stackoverflow.com/a/20433029/3531606

-webkit-transform: translate3d(0,0,0); 
transform: translate3d(0, 0, 0); 

应用translate3d至元素可以打开某些设备上的硬件加速(见这个答案:https://stackoverflow.com/a/18529444/3531606) 这个问题是通过添加以下CSS到所有有问题的DOM元素得到解决,因此它可能与渲染帮助太。

+0

允许JavaScript为我的WebView工作中,CSS不行WebSettings webSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); – angel

相关问题