Android-приложение зависает при запросе выбора SQL - PullRequest
0 голосов
/ 01 апреля 2011

Моя программа довольно регулярно взаимодействует с SQLite, и в начале приложения я вызываю запрос

mDatabase.rawQuery("SELECT key, 
                           indice as _id
                      FROM Dictionary",null);

Странно, но приложение останавливается при выполнении этой строки.Этого не происходит, если я отлаживаю приложение, но когда я запускаю приложение, элемент управления выходит из этой строки и никогда не возвращается.Я проверил это, поставив logcat до и после этой строки.Я не был в состоянии понять это поведение.Может ли кто-нибудь помочь?

PS В таблице Dictionary содержится более 2000-3000 записей.

РЕДАКТИРОВАТЬ: я пытался вызвать это как из пользовательского интерфейса и отдельных потоков.В любом случае выполнение останавливается на этом вызове (для этого потока).Поэтому, когда я вызываю его из другого потока, хотя ANR отсутствует, вызов все равно не удается и удерживает поток бесконечно.

EDIT2: эта проблема возникает не каждый раз, когда я запускаю приложение, а 5 из 10 раз,И, видимо, больше происходит на более слабых телефонах.

Ответы [ 3 ]

2 голосов
/ 01 апреля 2011

Позаботьтесь о нижеследующих пунктах.

  • Выполнение вызова для запроса в отдельном потоке, отличном от потока пользовательского интерфейса.
  • Курсор на макс. Может содержать до 1 МБ данных. Поэтому запросите минимальный объем данных.
1 голос
/ 01 апреля 2011

Вы должны удалить это из потока пользовательского интерфейса.Похоже, тяжелый звонок.Все, что занимает более 5 секунд и останавливает поток пользовательского интерфейса, вызывает ANR.

0 голосов
/ 01 апреля 2011

Да, Пиюшнп и Абхинав правы. AsyncTask или Thread - лучший вариант для получения деталей. Показывать индикатор выполнения при выполнении фоновой обработки. А когда вы получаете результаты запроса, отображайте их в действии или выполняйте необходимую обработку результатов запроса.

Этот пример имитирует вашу проблему. AsyncTask basic Пример: AsyncTask

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