繁体   English   中英

在 Android 中寻找 LeakedCloseableViolation 的来源

[英]Chasing origin of LeakedCloseableViolation in Android

我花了一天半的时间试图在我的应用程序中寻找 LeakedCloseableViolation 的起源,该应用程序是针对 API v32 开发的。

我启用了严格模式:

StrictMode.setVmPolicy( new StrictMode.VmPolicy.Builder()
  .detectLeakedClosableObjects()
  .penaltyListener( this.getMainExecutor(), ( Violation v ) -> {
    v.fillInStackTrace();
    v.printStackTrace();
  } )
  .build());

在 LogCat 我得到

W/System.err: android.os.strictmode.LeakedClosableViolation: A resource was acquired at attached stack trace but never released. See java.io.Closeable for information on avoiding resource leaks. Callsite: close
W/System.err:     at com.wattthis.reflowmate.App.lambda$onCreate$0(App.java:30)
W/System.err:     at com.wattthis.reflowmate.App$$ExternalSyntheticLambda0.onVmViolation(Unknown Source:0)
W/System.err:     at android.os.StrictMode.lambda$onVmPolicyViolation$3(StrictMode.java:2462)
W/System.err:     at android.os.StrictMode$$ExternalSyntheticLambda3.run(Unknown Source:4)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:942)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err:     at android.os.Looper.loopOnce(Looper.java:201)
W/System.err:     at android.os.Looper.loop(Looper.java:288)
W/System.err:     at android.app.ActivityThread.main(ActivityThread.java:7898)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
W/System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:936)

但是我在堆栈跟踪中没有看到任何关于问题根源的线索。
我审核了我的代码,没有看到任何未正确关闭的流或观察者。

该错误是完全可重现的。
我只是打开应用程序,然后在主 Activity 上保持打开状态 30 秒。 我根本不碰手机。
30 秒后,出现此错误。

任何人都知道如何获得有关导致此问题的原因的更多信息?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM