safe-java-js-webview-bridge
safe-java-js-webview-bridge copied to clipboard
发现问题
发现一问题,JsCallback回调时报空指针错误: Caused by: java.lang.NullPointerException at android.webkit.WebViewClassic.loadUrlImpl(WebViewClassic.java:2678) at android.webkit.WebViewClassic.loadUrlImpl(WebViewClassic.java:2694) at android.webkit.WebViewClassic.loadUrl(WebViewClassic.java:2687) at android.webkit.WebView.loadUrl(WebView.java:804) at cn.pedant.SafeWebViewBridge.JsCallback.apply(JsCallback.java:42) at com.jidian.android.edo.util.HostJsScope$2.onComplete(HostJsScope.java:137)
我猜测可能是这样的,因为回调有延迟,callback.apply()的时候可能webview已经被关闭,导致的这个错误
@pedant 收到了吗
我这边destory webview关联的activity也无法重现你的异常。不过从你的异常日志上看来,应该不是webview已经被回收的问题。因为如果是那样,会直接在android.webkit.WebView.loadUrl这里报空指针。另外每个JsCallback中强引用了相关联的WebView,即使activity退出销毁后也能正常执行回调JS,但如果回调的js涉及更新UI,则会有下面的异常。
11-27 10:46:45.992 22168-22168/cn.pedant.SafeWebViewBridge.sample E/Web Console﹕ Uncaught HostApp call error, code:500, message:method execute error:Unable to add window -- token android.os.BinderProxy@416894a0 is not valid; is your activity running? at null:1
但这里强引用引出个了新问题,就是可能造成内存泄漏。所以我更新下代码,使用SoftReference来包装JsCallback引用的WebView。
ok
提交 https://github.com/pedant/safe-java-js-webview-bridge/commit/23fed5db320020dd43ed7adebaf2611222a58a31
Gradle部署下吧?我也测测看
已部署
repositories {
mavenCentral()
}
dependencies {
compile 'cn.pedant.safewebviewbridge:library:1.4'
}
看下出现这个crash的手机系统是不是4.1.2,这个版本上的webview的问题,参见下面的链接 https://groups.google.com/forum/#!topic/google-admob-ads-sdk/tjqDzFJk98w
sorry这个可能不准,在其他地方也看到这个类似的bug,