众所周知,Webview在某些情况下可能会导致内存泄漏。所以我使用应用程序上下文来构建像 new WebView(getApplicationContext())
这样的 webview。
我需要让视频全屏,所以我重写了 WebChromeClient#onShowCustomView()
。在测试了一些设备之后,每次按下全屏图标都会导致崩溃。
这是痕迹:
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)`
当我使用 Activity 构建 webview 时,它运行良好。
那么这些安卓设备有什么不同呢?
是核心(Chrome
Webkit
)还是 android 版本的实现差异造成的?
我该如何解决这个问题?
最佳答案
如果您创建一个新 Activity 并隐藏操作栏并在您的 Activity xml 中添加 WebView 标记,您将不会再遇到这个问题。你可以获得全屏模式。但这是 android WebView 中的一个错误,谷歌已经推送了一个更新来解决这个错误。
关于android - 使用应用程序上下文时,某些 Android 设备中的 WebView 视频全屏模式崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38280810/