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读取器/写入器相关的对象”?