Android WebView JavaScript-桥在一段时间后变得不可用

Android WebView JavaScript-Bridge becomes unusable after some time

我们开发了一个混合 android 应用程序。对于 Webview 和本机 App-Code 之间的通信,我们通过以下方式设置了一个 Javascript-Bridge:

webView.addJavascriptInterface(
    WebViewJavaScriptApi(),
    "androidJsBridge"
)

这工作得很好,我们可以在 WebViewJavaScriptApi 中调用本机应用程序代码。但是一段时间后,有些功能似乎变得无法调用。

我通过 chrome 远程调试工具对此进行了测试:加载 webview 并在控制台中调用 androidJsBridge['myFunction'] 后,我将获得“本机代码”作为 return 值。几秒钟或几分钟后执行此操作,我将得到“未定义”。

这对我的任何方法都是随机发生的。没有任何可见的优先级或逻辑。

经过几个小时的调试,我们发现了这一点:

垃圾回收可能确实是问题所在。此外,该问题似乎仅在几周或几个月后才存在。所以可能 chrome webview 更新做错了什么?

有没有人有类似的问题?是否可以防止 JS 对象被垃圾回收?

这些方法在我的 JS 代码中以明文形式不可见。他们被称为:

androidJsBridge[functionName](promiseId, params);

其中 functionName 是包含最终方法的字符串变量。

Google同时解决了这个问题。参见:https://issuetracker.google.com/issues/185145178?pli=1