startManagingCursor () работает медленно? - PullRequest
0 голосов
/ 24 августа 2010

Как часть обучения Android, я следую учебнику NotePad

Одна вещь, которую я заметил в учебниках, соединение с БД не закрывается явно, и это имеет смысл, так как startManagingCursor() обрабатывает его сам.

Но если запускать / останавливать приложение быстрым способом (я запустил приложение вручную, щелкнув по его значку, и закрыл его, нажав назад), я заметил, что БД не закрывалась и следующеегенерируется ошибка:

08-23 18:11:55.637: WARN/SQLiteCompiledSql(10784): Releasing statement in a finalizer. Please ensure that you explicitly call close() on your cursor: SELECT _id, title, body FROM notes
08-23 18:11:55.637: WARN/SQLiteCompiledSql(10784): android.database.sqlite.DatabaseObjectNotClosedException: Application did not close the cursor or database object that was opened here

Явное закрытие соединения с БД в onDestroy решило проблему, но я полагаю, этого не должно было произойти.Это нормально?

1 Ответ

0 голосов
/ 26 августа 2010

Я думаю, что это неверный вопрос, поскольку он относится к двум различным концепциям. Экземпляры Cursor и SQLiteOpenHelper отличаются и должны быть закрыты отдельно. Когда мы используем startManagingCursor (), экземпляр курсора закрывается, но нам нужно вручную закрыть экземпляр SQLiteOpenHelper, что я делал в onDestroy ().

Я проверил это, не закрывая экземпляр SQLiteOpenHelper, и использовал startManagingCursor () для проверки ошибки, и я ее получал. Даже закрытие экземпляра SQLiteOpenHelper и не закрытие экземпляра курсора (если вы не используете startManagingCursor ()) может привести к этой ошибке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...