
我在使用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!
总结以上是内存溢出为你收集整理的带有shouldInterceptRequest覆盖的Android WebView即时崩溃全部内容,希望文章能够帮你解决带有shouldInterceptRequest覆盖的Android WebView即时崩溃所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)