WebViewを表示した際に、画面を長押しするとクラッシュするという事象が発生したので、対応をまとめました.

事象が発生するオペレーション

1.WebViewを開く.

2.WebView内のどこかの場所を長押しする.

3.クラッシュする.

明らかにバグのよう.発生するのはAndroid5.0 Lollipopから.

公式のバグチケットを見ても特に解決していない様子.

 

回避方法

1.WebViewのLongClickを抑止する.

LongClick用のリスナーを作り、エラーを発生させているSupportLibraryのメソッドまでクリックイベントを伝えなければよい.

 

ちなみに、ロングクリックの無効化では クラッシュを防げませんでした.

webView.setLongClickable(false);

おそらく、webView自体のロングクリックは発生しなくても、その後SupportLibraryにイベントが伝わってしまうからのようです.

2.SupportLibraryを利用しない.

SupportLibraryのActionBarActivityに問題があるようなので、これを直すか、SupportLibraryを利用しないようにすることでも回避可能.

 

エラーログ

12-20 01:15:33.630: E/AndroidRuntime(20356): java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:634)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.menu.MenuItemWrapperICS.getSupportActionProvider(MenuItemWrapperICS.java:322)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.menu.MenuItemWrapperICS.checkActionProviderOverrideVisibility(MenuItemWrapperICS.java:348)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.menu.MenuItemWrapperICS.setVisible(MenuItemWrapperICS.java:183)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:425)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:479)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:196)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.SupportMenuInflater.inflate(SupportMenuInflater.java:118)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.SelectActionModeCallback.onCreateActionMode(SelectActionModeCallback.java:47)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.view.SupportActionModeWrapper$CallbackWrapper.onCreateActionMode(SupportActionModeWrapper.java:151)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.app.ActionBarActivityDelegateBase$ActionModeCallbackWrapper.onCreateActionMode(ActionBarActivityDelegateBase.java:1367)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.app.WindowDecorActionBar$ActionModeImpl.dispatchOnCreate(WindowDecorActionBar.java:1012)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.app.WindowDecorActionBar.startActionMode(WindowDecorActionBar.java:510)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.app.ActionBarActivityDelegateBase.startSupportActionMode(ActionBarActivityDelegateBase.java:576)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.app.ActionBarActivityDelegateHC.startActionModeForChild(ActionBarActivityDelegateHC.java:62)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.support.v7.internal.widget.NativeActionModeAwareLayout.startActionModeForChild(NativeActionModeAwareLayout.java:44)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:673)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:673)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:673)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:673)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.view.View.startActionMode(View.java:3624)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.WebView.setUpSelect(WebView.java:5709)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.WebView.selectText(WebView.java:4640)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.WebView.selectText(WebView.java:4633)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.WebView.performLongClick(WebView.java:4618)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.webkit.WebView$PrivateHandler.handleMessage(WebView.java:8687)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.os.Handler.dispatchMessage(Handler.java:99)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.os.Looper.loop(Looper.java:137)
12-20 01:15:33.630: E/AndroidRuntime(20356): at android.app.ActivityThread.main(ActivityThread.java:4424)
12-20 01:15:33.630: E/AndroidRuntime(20356): at java.lang.reflect.Method.invokeNative(Native Method)
12-20 01:15:33.630: E/AndroidRuntime(20356): at java.lang.reflect.Method.invoke(Method.java:511)
12-20 01:15:33.630: E/AndroidRuntime(20356): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:817)
12-20 01:15:33.630: E/AndroidRuntime(20356): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
12-20 01:15:33.630: E/AndroidRuntime(20356): at dalvik.system.NativeStart.main(Native Method)

 

 

Leave a Reply

Your email address will not be published. Required fields are marked *