WindowManagerGlobal: android.view.WindowLeaked 及WebView页面点击无效

05-24 17:45:48.090 2811-2811/com.yuanzong.lawmachine E/WindowManagerGlobal: android.view.WindowLeaked: Activity com.
xxxx has leaked window com.android.internal.policy.impl.PhoneWindow D e c o r V i e w 1 d 1 f f 6 d 5 V . E . . . . . R . . . . . . D 0 , 0 − 870 , 284 t h a t w a s o r i g i n a l l y a d d e d h e r e a t a n d r o i d . v i e w . V i e w R o o t I m p l . < i n i t > ( V i e w R o o t I m p l . j a v a : 398 ) a t a n d r o i d . v i e w . W i n d o w M a n a g e r G l o b a l . a d d V i e w ( W i n d o w M a n a g e r G l o b a l . j a v a : 286 ) a t a n d r o i d . v i e w . W i n d o w M a n a g e r I m p l . a d d V i e w ( W i n d o w M a n a g e r I m p l . j a v a : 85 ) a t a n d r o i d . a p p . D i a l o g . s h o w ( D i a l o g . j a v a : 298 ) a t a n d r o i d . a p p . A l e r t D i a l o g DecorView{1d1ff6d5 V.E..... R......D 0,0-870,284} that was originally added here at android.view.ViewRootImpl.<init>(ViewRootImpl.java:398) at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:286) at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:85) at android.app.Dialog.show(Dialog.java:298) at android.app.AlertDialog DecorView1d1ff6d5V.E.....R......D0,0870,284thatwasoriginallyaddedhereatandroid.view.ViewRootImpl.<init>(ViewRootImpl.java:398)atandroid.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:286)atandroid.view.WindowManagerImpl.addView(WindowManagerImpl.java:85)atandroid.app.Dialog.show(Dialog.java:298)atandroid.app.AlertDialogBuilder.show(AlertDialog.java:993)
at android.webkit.JsDialogHelper.showDialog(JsDialogHelper.java:128)
at com.android.webview.chromium.WebViewContentsClientAdapter.showDefaultJsDialog(WebViewContentsClientAdapter.java:940)
at com.android.webview.chromium.WebViewContentsClientAdapter.handleJsAlert(WebViewContentsClientAdapter.java:849)
at org.chromium.android_webview.AwContentsClientBridge$$Lambda 2. r u n ( U n k n o w n S o u r c e ) a t a n d r o i d . o s . H a n d l e r . h a n d l e C a l l b a c k ( H a n d l e r . j a v a : 739 ) a t a n d r o i d . o s . H a n d l e r . d i s p a t c h M e s s a g e ( H a n d l e r . j a v a : 95 ) a t a n d r o i d . o s . L o o p e r . l o o p ( L o o p e r . j a v a : 135 ) a t a n d r o i d . a p p . A c t i v i t y T h r e a d . m a i n ( A c t i v i t y T h r e a d . j a v a : 5289 ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( N a t i v e M e t h o d ) a t j a v a . l a n g . r e f l e c t . M e t h o d . i n v o k e ( M e t h o d . j a v a : 372 ) a t c o m . a n d r o i d . i n t e r n a l . o s . Z y g o t e I n i t 2.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at android.app.ActivityThread.main(ActivityThread.java:5289) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit 2.run(UnknownSource)atandroid.os.Handler.handleCallback(Handler.java:739)atandroid.os.Handler.dispatchMessage(Handler.java:95)atandroid.os.Looper.loop(Looper.java:135)atandroid.app.ActivityThread.main(ActivityThread.java:5289)atjava.lang.reflect.Method.invoke(NativeMethod)atjava.lang.reflect.Method.invoke(Method.java:372)atcom.android.internal.os.ZygoteInitMethodAndArgsCaller.run(ZygoteInit.java:963)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:758)
05-24 17:54:49.443 520-640/system_process W/InputDispatcher: Asynchronous input event injection failed.
05-24 17:55:06.348 520-640/system_process W/InputDispatcher: Asynchronous input event injection failed.

现象: 从一个WebView跳转到另一个 WebView页面,网页弹出alert页面,没有点击确定或者取消,直接返回,第一个WebView无法点击

原因: 可能是多个WebView共用同一个 webview kernal,如果没有处理完alert事件(阻塞操作),会导致 webview kernal事件阻塞

解决: 自定义 WebView中WebChromeClient#onJsAlert回调,手动处理弹窗显示,取消操作, js alert事件

@Override
            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                if (alertDialog != null) {
                    alertDialog.dismiss();
                    jsResult.cancel();
                }

                jsResult = result;
                alertDialog = new AlertDialog.Builder(view.getContext())
                        .setTitle(url)
                        .setPositiveButton("确定", (dialog, which) -> {
                            result.confirm();
                        })
                        .setMessage(message)
                        .create();
                alertDialog.show();
                return true;
            }

同时在WebView销毁的时候,处理释放alert事件

 public void onDestroy() {
        if (alertDialog != null) {
           Leon.d(TAG,"onDestroy dismiss dialog");
            if (jsResult != null) {
                jsResult.cancel();
            }
            alertDialog.dismiss();
        }
        onDetachedFromWindow();
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: package name: com.google.android.webview 是指Google提供的一个系统应用程序,用于在Android设备上运行和渲染WebView界面。WebView是一个Android平台上的组件,允许应用程序在自己的界面中嵌入浏览器功能。通过该包名,用户可以在Google Play商店找到和下载此应用程序。 Google的WebView应用程序是一个非常重要的工具,它为其他应用程序提供了在应用内显示网页的功能。许多应用程序,特别是浏览器和社交媒体应用,使用这个WebView组件来显示网页内容。在用户点应用内的链接时,WebView会处理页面加载和渲染,实现无缝的浏览体验,同时保护用户的隐私和安全。 通过更新WebView应用程序,Google可以将最新的Web技术和安全更新带给设备上的所有应用程序。这样,用户不必等待整个操作系统的更新才能获得最新的浏览体验。另外,拥有独立的WebView应用程序还使Google可以更加灵活地向用户提供更新。 总之,在Android设备上,com.google.android.webview是一款由Google提供的系统应用程序,用于提供嵌入式浏览器功能的WebView组件。用户可以通过Google Play商店下载此应用程序,并通过及时的更新获得最新的Web浏览体验和安全性保障。 ### 回答2: Package name: com.google.android.webview 是指谷歌 Android 平台上的一个应用程序包。该应用程序包含谷歌为 Android 设备提供的内置 WebView 组件。 WebView 是一个能够在 Android 应用程序中嵌入浏览器功能的控件。通过 WebView,开发者可以在应用程序中显示网页内容,实现浏览器的基本功能,如加载网页、浏览网页、处理链接等。 com.google.android.webview 是一个在 Play 商店上提供下载的应用程序,用户可以通过下载安装该应用程序来更新 WebView 组件。WebView 组件的更新是由谷歌负责的,升级 WebView 可以使用户获得更好的浏览网页体验和更高的安全性。 通过维护 WebView 应用程序的更新,谷歌可以提供最新的浏览器功能和修复已知的漏洞,以确保用户的安全和隐私。 因此,com.google.android.webview 是一个非常重要的应用程序包,它可以提供给用户最新的 WebView 组件,并且能够不断改进用户在 Android 设备上的浏览网页体验。 ### 回答3: com.google.android.webview是一个在Google Play商店上可用的应用程序。它是由谷歌开发的一个用于Android系统的Web浏览器引擎。它可以提供更好的网页浏览体验,并允许用户在应用程序中加载和显示网页内容。com.google.android.webview可以作为系统级的组件,在Android设备上提供默认的Web浏览功能。它还提供了一些应用程序编程接口(API),允许开发人员在他们自己的应用程序中使用Web浏览器引擎的功能。通过使用com.google.android.webview,开发人员可以将网页内容嵌入到他们的应用程序中,从而创建出更丰富和交互式的用户体验。此外,com.google.android.webview还支持自动更新,这意味着用户不需要手动更新这个组件,他们总是可以使用最新的版本。总的来说,com.google.android.webview是一个非常有用的应用程序,它为用户提供了出色的Web浏览功能,并为开发人员提供了更多的灵活性和创造力来开发他们的程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值