2013-01-20 1 views
0

В моей активности Android я использую rawquery много раз. И я использую статический курсор для этого rawquery. Мой вопрос: должен ли я закрыть курсор перед выполнением другого rawquery или просто оставить его открытым, пока все исходные запросы не будут выполнены (только один раз).Android эффективно использует курсор?

Я пробую оба, и результат будет таким же. Но с точки зрения производительности/отладки, какой из них лучше?

+0

«Но с точки зрения производительности, какой из них лучше?» Вы можете легко ответить на этот вопрос самостоятельно, если используете такие инструменты, как [DDMS] (https://developer.android.com/tools/debugging/ddms.html). – Sam

ответ

0

вы должны закройте свой курсор после его окончания. в противном случае вы будете использовать все допустимые ресурсы курсора для своего приложения (оно ограничено) и получите исключение.

Создание статического кода не делает его одним открытым курсором для всех. помните, что он статичен на стороне java; здесь есть родная сторона, которая использует новые ресурсы для каждого открытого курсора. вам нужно освободить эти ресурсы.

0

Если вы не закрываете курсор после каждого использования, вы очень плохо пропускаете память. То, что вы на самом деле делаете, это создать новый курсор с каждым запросом, но с использованием одной статической ссылки ссылаться только на новейшую. (Ссылки на старшие курсоры теряются.)

Незакрытые курсоры также могут приводить к фатальным ошибкам дальше по строке, если (например) среда выполнения пытается выполнить некоторую сборку мусора. МетодSQLiteDatabase (вызванный сборкой мусора) генерирует исключение, если он замечает, что некоторые курсоры все еще открыты, и это может убить ваше приложение.

+0

Большое спасибо! –

Смежные вопросы