2012-01-05 18 views
2

アンドロイドマーケットを通じて、私のアプリのユーザーは、かなりの数のUnsupportedOperation例外を報告しています。スタックトレースは、Webビューコード内から作成されたdrawPicture()呼び出しを示します。私は実際に私のアプリでwebviewsを使用しています。Androidハードウェアアクセラレーションwebviewクラッシュ

HWAが有効になっているときdrawPicture()はサポートされていませんが、この場合は呼び出しがWebviewから来ていることはわかっています。 webviewでこの方法を使用しないために必要な特別な手順はありますか?

残念ながら私はこの問題を再現できませんでしたが、これはユーザーが間違いなく見ています。

スタックトレース:

java.lang.UnsupportedOperationException 
at android.view.GLES20Canvas.drawPicture(GLES20Canvas.java:753) 
at android.webkit.WebView.drawCoreAndCursorRing(WebView.java:4128) 
at android.webkit.WebView.drawContent(WebView.java:3797) 
at android.webkit.WebView.onDraw(WebView.java:3862) 
at android.view.View.draw(View.java:9286) 
at android.view.View.getDisplayList(View.java:8749) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9289) 
at android.view.View.getDisplayList(View.java:8749) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9289) 
at android.widget.FrameLayout.draw(FrameLayout.java:419) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1923) 
at android.view.View.getDisplayList(View.java:8749) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9289) 
at android.view.View.getDisplayList(View.java:8749) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.getDisplayList(View.java:8747) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2554) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9289) 
at android.widget.FrameLayout.draw(FrameLayout.java:419) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1923) 
at android.view.View.getDisplayList(View.java:8749) 
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:609) 
at android.view.ViewRoot.draw(ViewRoot.java:1600) 
at android.view.ViewRoot.performTraversals(ViewRoot.java:1416) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:2046) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4123) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:491) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
at dalvik.system.NativeStart.main(Native Method) 
+3

これは面白いバグです。 WebViewは、ハードウェアアクセラレーションされたキャンバス上に描画するとき、drawPicture()ではなく完全に異なるコードパスを使用します。あなたが復習ケースを思いつくことができるなら、それを私に送ってください。私はそれをWebViewチームに転送します。 –

+0

これがなぜ落とされたのか分かりません... – BeRecursive

答えて

1

あなたがrestorePictureを使用していますか? (http://developer.android.com/reference/android/webkit/WebView.html#restorePicture(android.os.Bundle、java.io.File)

このメソッドはハードウェアアクセラレーションではサポートされていません(このメソッドは推奨されていないため、とにかく降ろす必要があります)。回避策として、他のコンテンツを読み込むまで、Webビューをソフトウェアレイヤーに設定することができます。

+0

私はrestorePicture()を使用していました。そのコードパスは私のために実行されていませんが、おそらくコーナーのいくつかのケースで実行されることがあります(たとえば、デバイス上のメモリ不足)。私はテストを続け、restorePicture()の削除が役立つかどうかを見ていきます。 –