ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

带有shouldInterceptRequest覆盖的Android WebView即时崩溃

2019-11-08 19:26:26  阅读:262  来源: 互联网

标签:webview intercept chromium android


我在使用Android WebView时遇到了一些“乐趣”.

我使用它来显示登录屏幕,然后在响应时拦截身份验证代码.应该很简单…

如果仅覆盖shouldOverrideUrlLoading但覆盖(就像Android Studio自动完成的那样),我的WebView就会加载并显示为绝对正常:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse {
    return super.shouldInterceptRequest(view, request)
}

没有其他更改,它将在运行时立即崩溃,并发生本机崩溃

A/chromium: [FATAL:jni_android.cc(259)]

其次是

A/libc: Fatal signal 6 (SIGABRT), code -6 (SI_TKILL) in tid 16220 (TaskSchedulerFo), pid 16175 (eports.internal)

奇怪的是,如果我使响应为空,则WebView可以再次工作.但是,将其他任何内容添加到shouldInterceptRequest方法中会使它掉落,并出现相同的错误.

所以这工作:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse? {
    return super.shouldInterceptRequest(view, request)
}

但这会因上述崩溃而崩溃:

override fun shouldInterceptRequest(
    view: WebView?,
    request: WebResourceRequest?
): WebResourceResponse? {
    val url = view?.url
    return super.shouldInterceptRequest(view, request)
}

这似乎是一个很奇怪的问题,对我来说,为什么添加val分配根本没有任何区别是没有意义的.

我一直在研究错误,建议添加

webView.destroy()

在活动/片段onDestroy / onDestroyView中,不幸的是这没有帮助.

设备和仿真器以及Android SDK 22和28的行为相同.

有人看过这样的东西吗?我觉得我可能缺少明显的东西.

如果它也对生成了Breakpad Microdump的任何人有用,它太大了,无法在此问题中发布.但是,请告诉我它或其一部分可能有助于诊断!

解决方法:

我已找到问题所在,因此以为我会将其发布在这里给其他类似职位的人.

本机崩溃是由WebView中运行的JavaScript引起的.

WebView在后台线程中运行JavaScript,因此任何与UI线程相关的操作都将导致JavaScript在本机级别崩溃.给上面非常无用的崩溃.

val分配导致崩溃的原因不是分配val,而是调用UIThread上的if?view..url.

解决方案?

科特林:

webView?.post{
   // Do your UI work here.
}

Java:

webView.post(new Runnable(){
    public void run() {
    // Do your UI work here.
    }
})

并且不要在覆盖的方法内触摸UIThread!

标签:webview,intercept,chromium,android
来源: https://codeday.me/bug/20191108/2009918.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有