"Заявление о попытках с ресурсами" действительно работает с объектом-курсором Android?
Поскольку 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();
}
Тем не менее, в наши дни наши тестировщики постоянно сообщали мне, что это утверждение по-прежнему вызывало утечку памяти при выполнении тестов на обезьянах или даже истощало всю память при выполнении циклического теста для этого метода. Все файлы журнала указали, что 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();
}
}
Я искал документацию Java для этого утверждения, и теперь мне интересно, действительно ли это утверждение работает с общим "близким объектом" или только с этим "связанным объектом для чтения / записи Java"?