Comme nous le savons tous, Webview peut provoquer des fuites de mémoire dans certains cas. J'utilise donc le contexte de l'application pour construire la webview comme suit new WebView(getApplicationContext())
.
J'ai besoin de rendre la vidéo en plein écran, donc je passe outre WebChromeClient#onShowCustomView()
Après avoir testé quelques appareils, l'un d'entre eux se plante à chaque fois que l'on appuie sur l'icône plein écran.
Voici la trace :
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:697)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:345)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
at android.view.Window$LocalWindowManager.addView(Window.java:554)
at android.widget.MediaController.show(MediaController.java:338)
at android.webkit.HTML5VideoFullScreen.showControllerInFullScreen(HTML5VideoFullScreen.java:387)
at android.webkit.HTML5VideoViewProxy$VideoPlayer.end(HTML5VideoViewProxy.java:310)
at android.webkit.HTML5VideoViewProxy.handleMessage(HTML5VideoViewProxy.java:450)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4898)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
at dalvik.system.NativeStart.main(Native Method)`
Cela fonctionne bien lorsque j'ai utilisé l'activité pour construire le webview.
Alors quelle est la différence avec ces appareils Android ?
Est-ce que c'est le noyau ( Chrome
Webkit
) ou une différence de mise en œuvre de la version d'Android à blâmer ?
Comment puis-je résoudre ce problème ?