android - WebView.postWebMessage() 中可能存在内存泄漏
问题描述
我正在尝试将网络消息发送到 Android 中的 WebView。
运行此示例中的代码时: https ://github.com/commonsguy/cw-omnibus/tree/master/WebKit/SensorPort
来电:
wv.postWebMessage(new WebMessage("", new WebMessagePort[]{channel[1]}), Uri.EMPTY);
导致以下异常:
com.commonsware.android.webkit.bridge.port E/System: Uncaught exception thrown by finalizer
com.commonsware.android.webkit.bridge.port E/System: java.lang.IllegalStateException: Warning: Router objects should be explicitly closed when no longer required otherwise you may leak handles.
at TM.finalize(chromium-TrichromeWebViewGoogle.apk-stable-410410681:4)
at java.lang.Daemons$FinalizerDaemon.doFinalize(Daemons.java:291)
at java.lang.Daemons$FinalizerDaemon.runInternal(Daemons.java:278)
at java.lang.Daemons$Daemon.run(Daemons.java:139)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.lang.Exception: AutocloseableRouter allocated at:
at TM.<init>(chromium-TrichromeWebViewGoogle.apk-stable-410410681:7)
at DP.<init>(chromium-TrichromeWebViewGoogle.apk-stable-410410681:6)
at org.chromium.content.browser.framehost.RenderFrameHostImpl.<init>(chromium-TrichromeWebViewGoogle.apk-stable-410410681:10)
at org.chromium.content.browser.framehost.RenderFrameHostImpl.create(chromium-TrichromeWebViewGoogle.apk-stable-410410681:1)
at J.N.MjidYpBx(Native Method)
at org.chromium.content.browser.webcontents.WebContentsImpl.r0(chromium-TrichromeWebViewGoogle.apk-stable-410410681:3)
at K7.g(chromium-TrichromeWebViewGoogle.apk-stable-410410681:5)
at com.android.webview.chromium.WebViewChromium.postMessageToMainFrame(chromium-TrichromeWebViewGoogle.apk-stable-410410681:4)
at android.webkit.WebView.postWebMessage(WebView.java:1971)
at com.commonsware.android.webkit.bridge.MainActivity.initPort(MainActivity.java:118)
at com.commonsware.android.webkit.bridge.MainActivity.access$100(MainActivity.java:35)
at com.commonsware.android.webkit.bridge.MainActivity$1.onPageFinished(MainActivity.java:60)
at Fa.b(chromium-TrichromeWebViewGoogle.apk-stable-410410681:2)
at Cs.handleMessage(chromium-TrichromeWebViewGoogle.apk-stable-410410681:65)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223)
at android.app.ActivityThread.main(ActivityThread.java:7656)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
我正在使用带有 api 30 的模拟器。
这个例外是什么意思?代码是否存在内存泄漏?我该如何解决?
解决方案
推荐阅读
- python - 为什么在单元测试期间无法读取环境变量?
- ios - 不再支持代码签名版本
- qemu - qemu-system-aarch64:../accel/tcg/cpu-exec.c:681:cpu_loop_exec_tb:断言“icount_enabled()”失败
- sockets - 套接字缓冲区在 SCM_RIGHTS 类型时会发送消息吗?
- flutter - Flutter ListView.Builder() 动态列表 - 显示数据但有错误
- ajax - 如何使用 gls api 发布数据
- hardware - 奇怪的 Wemos D1 迷你行为
- npm - NPM 包中的示例文件夹有什么用?
- python - 在装饰方法中重新启动装饰器的参数
- mysql - MySQL uuid 未创建表