资源无法调用关闭

Tom*_*hik 8 warnings load properties

我收到 android logcat 消息“资源无法调用关闭”。我已经追踪到该消息的生成位置。这是代码:

    Properties defaultProperties = new Properties();
    URL propURL = Util.class.getClassLoader().getResource(DEFAULT_PROPERTIES_FILE);
    if (propURL != null)
    {
        InputStream is = null;
        try
        {
            // Load properties from URL.
            is = propURL.openConnection().getInputStream();
            defaultProperties.load(is);
            is.close();
        }
        catch (Exception ex)
        {
Run Code Online (Sandbox Code Playgroud)

该消息是在调用“defaultProperties.load(is)”时生成的。

我在该行上放置了一个断点,当我跨过该行时,就会生成警告消息。我不是代码的作者,但该行至少执行两次,并且是在生成警告时调用该行的第二次。我只是不明白在任何情况下如何在该行上生成无法关闭的资源。我无法解释如何或为何会在那里生成该错误消息。有任何想法吗?

Tom*_*hik 2

经过思考,我得出的结论是,该问题与导致警告的“defaultProperties.load(is)”行没有任何关系。尽管该消息总是在第二次调用该行时生成,但我当前的想法是问题发生在其他地方,但是当调用该行时,它可能会屈服于其他一些与虚拟机相关的线程时间来处理,并且该进程正在检测到某些资源关闭失败。我的结论是,该问题与完全不同的事物有关,调用该行是问题出现的时间,但这并不是导致问题的原因。

  • 自从这篇文章发布以来,我学会了如何追踪资源未关闭的问题: try { // 请参阅 https://wh0.github.io/2020/08/12/closeguard.html 获取解释 Class.forName(" dalvik.system.CloseGuard") .getMethod("setEnabled", boolean.class) .invoke(null, true); } catch (ReflectiveOperationException e) { 抛出新的 RuntimeException(e); } (2认同)