2013-08-03 9 views
17

私はWebViewを使用してAndroidアプリをラッピングしており、HTML5キャンバスをレンダリングする必要があります。それは私のすべてのデバイスで完璧に動作します。 My 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は

D/WebViewの(20071)をlockedfalse:blockWebkitViewMessage =偽

ボタンをクリックすると、キャンバスがレンダリングされます。そのため、最初のログ項目はサーフェスタッチイベント用です。私のアプリケーションでWebkitブラウザを使って直接pingを実行するとS4で動作しますが、自分でラッピングするかCordovaを使用するとエラーになります。問題をさらに表示するために2つのスクリーンショットを追加しました。最初のものが正しく表示され、2番目が問題になります。アンドロイド2.3.6

enter image description here

アンドロイド:4.2.2:だから、戻って私の質問に

enter image description here

。このメッセージはどうなっていますか?誰かが適切にキャンバスをレンダリングする方法について提案していますか?

+0

いくつかの異なるWebページを試しましたが、これを引き起こしているWebページが何であるか、それともすべてのWebページですか? –

+0

Webkitでブロックされた描画スレッドunitlディスパッチイベントが終了したことを意味します。 –

+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イベントに関連しています。期待どおりのボタンクリックではありません。

最初に自分のリンクの1つをクリックしてテストしたとき、もともと私はGalaxy Tabが自分のリンクをブロックしていると思っていました。それは、ギャラクシータブ2はクリックの振る舞いに非常に敏感であることが判明したので、私がリンクをクリックしていると思ったとき、私は実際には行方不明でした。私が必要と思っていたより少し上をクリックすることで、私は自分のリンクを有効にすることができました。

私の疑惑を検証するために、自分のリンクのフォントサイズを大幅に増やしました。はるかに大きなリンクで、私は最初の試行で、リンクを正常にクリックすることができ、私のアプリは今期待どおりに実行されます。私はあなたのボタンをもっと大きくすれば、それをうまくクリックすることができると強く思っています。

2

私は14にアンドロイドマニフェストファイルに私の最小SDKのバージョンを設定することで、問題を解決することができました:バージョン14で

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

、メッセージはまだログに表示されますが、タッチイベントが処理されます。 minSdkVersionを元に戻すと、タッチイベントは処理されません。マニフェストのハードウェアアクセラレーションをオフにしたり、さまざまなCSS Webkitスタイルを使用したりすることは役に立ちませんでした。 minSdkVersionの設定だけがそれを修正しました。

どうやらGalaxy Tabでは、古いバージョンのSDKがサポートされているため、javascriptのタッチイベント処理に問題が発生し、タッチ移動が行われている間はblockWebkitDrawがtrueのままになります。これにより、私のキャンバスコードがtouchmoveイベントを受け取ってドローを実行するのを防ぐことができます。 SDKのバージョンを14に設定すると、touchイベントが発生したときにblockWebkitDrawがtrueに設定されますが、タッチが処理された後に解除され、描画するキャンバスコードが呼び出されます。

1

私はGalaxy S3で同様の問題がありました。私はこの答えの解決策を見つけました:https://stackoverflow.com/a/20433029/3531606。 問題は、すべての問題のDOM要素に次のCSSを追加することで解決した。

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

要素にtranslate3dを適用すると、(この回答を参照してください。https://stackoverflow.com/a/18529444/3531606)をいくつかのデバイス上のハードウェアアクセラレーションをオンにすることができますので、レンダリングに役立つかもしれませんあまりにも。

+0

JavaScriptがwebviewの仕事に使えるようにするには、CSSが動作しません。WebSettings = myWebView.getSettings(); webSettings.setJavaScriptEnabled(true); – angel

関連する問題