“ try-with-resources语句”是否真的适用于android Cursor对象?

Sha*_*Lin 5 java android cursor try-with-resources android-sqlite

自Java从1.7开始引入该语句以来,我就采用了以下规则来编写与光标相关的语句,如下所示:

try (Cursor cursor = context.getContentResolver().query(queryAccountUri, null, null, null, null)) {
            if (cursor != null && cursor.moveToFirst()) {
                entry.userId = cursor.getString(0);
                entry.account = cursor.getString(1);
                entry.phone = cursor.getString(2);
                entry.nickName = cursor.getString(3);
                entry.icon = cursor.getString(4);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
Run Code Online (Sandbox Code Playgroud)

但是,这些天,我们的测试人员不断通知我,该语句在运行猴子测试时仍然导致内存泄漏,或者如果对此方法进行循环测试,甚至会耗尽所有内存。cursor由于某些NOT CLOSING问题,所有日志文件都表明该对象是凶手。因此,我必须更改代码以cursor手动关闭对象,如下所示:

try {
            if (cursor.moveToFirst()) {
                entry.userId = cursor.getString(0);
                entry.account = cursor.getString(1);
                entry.phone = cursor.getString(2);
                entry.nickName = cursor.getString(3);
                entry.icon = cursor.getString(4);
            }
        } catch (NullPointerException e) {
            e.printStackTrace();
        } finally {
            try {
                cursor.close();
            } catch (NullPointerException e) {
                e.printStackTrace();
            }
        }
Run Code Online (Sandbox Code Playgroud)

我在Java文档中查找了此语句,现在我想知道该语句是否真的适用于常规“可关闭对象”或仅与“纯Java读取器/写入器相关的对象”?