我在用android网络视图玩得很开心。

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

如果我只重写shouldroverrideurlloading,但如果我重写(就像android studio自动完成的那样),则我的webview加载和显示非常好:

override fun shouldInterceptRequest(

view: WebView?,

request: WebResourceRequest?

): WebResourceResponse {

return super.shouldInterceptRequest(view, request)

}

在没有其他更改的情况下,它会在运行时立即崩溃,并发生本机崩溃

a/chromium:[致命:jni_android.cc(259)]

然后

a/libc:致命信号6(sigabrt),tid 16220(taskschedulerfo)中的代码-6(si_tkill),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()

在activity/fragments ondestroy/ondestroyview中,不幸的是这没有帮助。

在设备和模拟器以及android sdk 22和28上的行为是相同的。

以前有人见过这样的东西吗?我觉得我可能遗漏了一些显而易见的东西。

如果它对任何人都有用的话,我还生成了breakpad microdump,它太大了,不能在这个问题上发表。但让我知道,如果它,或它的一个子集,可能有助于诊断!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐