首页 > 解决方案 > 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 的模拟器。

这个例外是什么意思?代码是否存在内存泄漏?我该如何解决?

标签: androidandroid-webview

解决方案


推荐阅读