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

问题描述 投票:0回答:2

我们开发了一款混合安卓应用程序。对于 Webview 和本机应用程序代码之间的通信,我们通过以下方式设置 Javascript 桥:

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

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

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

我的任何方法都会随机发生这种情况。没有任何可见的优先级或逻辑。

经过几个小时的调试,我们发现了这一点:Android - 带有指向 WebView 指针的 Javascript 接口 - 如何在没有 memleak 的情况下实现它

垃圾收集确实可能是问题所在。而且这个问题似乎只存在几周或几个月。那么 chrome webview 更新可能做了错误的事情吗?

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

这些方法在我的 JS 代码中以纯文本形式不可见。他们通过以下方式调用:

androidJsBridge[functionName](promiseId, params);

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

javascript android webview garbage-collection hybrid-mobile-app
2个回答
0
投票

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


0
投票

在我的例子中,当方法参数的数量不正确时(例如:android中的方法有3个参数,但在webview中调用它有5个参数)或者它们的类型不正确,就会发生错误。

© www.soinside.com 2019 - 2024. All rights reserved.