我们开发了一个混合的android应用程序。为了在Webview和原生App-Code之间进行通信,我们通过以下方式建立了一个Javascript-Bridge:
webView.addJavascriptInterface(
WebViewJavaScriptApi(),
"androidJsBridge"
)这可以很好地工作,我们可以在WebViewJavaScriptApi中调用本机应用程序代码。但是过了一段时间,一些函数似乎变得不可调用了。
我通过chrome远程调试工具对此进行了测试:加载webview并在控制台中调用androidJsBridge‘’myFunction‘后,我将获得“原生代码”作为返回值。几秒钟或几分钟后,我将得到“未定义”。
这在我的任何方法中都是随机发生的。任何可见的优先级或逻辑。
经过几个小时的调试,我们发现了这个:Android - Javascript Interface with pointer to WebView - how to achive it without memleak
垃圾收集确实可能是问题所在。此外,这个问题似乎只存在于几周或几个月之后。所以可能chrome webview更新做的是错误的事情?
有没有人有类似的问题?有可能防止JS对象被垃圾回收吗?
在我的JS-Code中,这些方法在明文中不可见。它们通过以下方式调用:
androidJsBridge[functionName](promiseId, params);
其中functionName是包含最终方法的字符串变量。
发布于 2021-07-23 16:00:43
谷歌在此期间解决了这个问题。请参阅:https://issuetracker.google.com/issues/185145178?pli=1
https://stackoverflow.com/questions/66746573
复制相似问题