android - blockWebkitDraw 是什么意思以及如何解决它?

标签 android webkit html5-canvas

我正在使用 WebView 包装 Android 应用程序,它需要呈现 HTML5 Canvas 。它在我所有的设备上都能完美运行,除了一个。我的 Galaxy S4 (4.2.2) 正在闪烁 Canvas ,然后它很快变成灰色。这是它产生的 logcat 消息:

D/GestureDetector(20071): [Surface Touch Event] mSweepDown False, mLRSDCnt : -1 mTouchCnt : 7 mFalseSizeCnt:0

V/WebViewInputDispatcher(20071): blockWebkitDraw

V/WebViewInputDispatcher(20071): blockWebkitDraw lockedfalse

D/webview(20071): blockWebkitViewMessage= false

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

Android 2.3.6:

enter image description here

安卓:4.2.2:

enter image description here

回到我的问题。这条消息是怎么回事?有人对如何正确渲染 Canvas 有任何建议吗?

最佳答案

我可以通过将 android manifest 文件中的最低 sdk 版本设置为 14 来解决问题:

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

在版本 14 中,消息仍会出现在日志中,但会处理触摸事件。当我重新设置 minSdkVersion 时,不处理触摸事件。关闭 list 中的硬件加速以及各种 CSS webkit 样式并没有帮助。只有 minSdkVersion 设置为我修复了它。

不知何故,在 Galaxy Tab 上,旧版本的 SDK 支持导致 javascript 触摸事件处理出现问题,并且 blockWebkitDraw 在触摸移动发生时保持为真。这可以防止我的 Canvas 代码接收到 touchmove 事件并执行绘制。当我将 SDK 版本设置为 14 时,blockWebkitDraw 会在触发触摸事件时设置为 true,但在处理触摸后它会取消设置,并且会调用要绘制的 Canvas 代码。

关于android - blockWebkitDraw 是什么意思以及如何解决它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18032616/

相关文章:

javascript - 获取带有原始图像 alpha 的图像数据?

javascript - 动画到特定点

android - fragment 的后退按钮不调用 onPause() 或 onStop()

android - 应用程序已在运行时激活 GPS

android - 自定义按钮可绘制角在 2.3.3 和 4.0 中左下角、右下角不同(4.0 显示在右侧)

css - 在伪元素上进行转换时过渡会导致元素在Safari中抖动

css - webkit-filter 中断溢出 : hidden

javascript - 什么是 "native",什么不在 React Native 项目中?

linux - webkit如何找到libflashplayer.so?

javascript - 二维多边形边中的矩形镶嵌不重叠