Android: как отменить / прервать / прервать ожидающий запрос SQLite? - PullRequest
3 голосов
/ 11 августа 2010

В моем приложении Android пользователь может заполнить базу данных импортированными данными, а затем выполнить предопределенный сложный запрос SQL. При использовании некоторого шаблона данных запрос может занять очень много времени (минуты и более в HTC Hero), в то время как обычное использование не будет превышать 10-15 секунд.

Есть ли способ отменить ожидающий запрос SQLite на Android? Тайм-аут также будет хорошим, частичные результаты не требуются. Я выполняю запрос в пределах AsyncTask.doInBackground()

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

Ответы [ 4 ]

2 голосов
/ 07 июня 2011

Вы не можете отменить ожидающий SQL-запрос. Это сделано в движке SQLite. В SQLite есть собственные методы для прерывания запроса, но он недоступен в интерфейсе Java.

Лучше всего было бы улучшить производительность запросов.
Читать это: http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning

Вы можете разделить длительные запросы на меньшие, ограничив количество строк. Тогда было бы проще отменить запрос, который выполняется кусками.

0 голосов
/ 04 октября 2017

Вы можете отменить выполнение запросов на sqlite , используя android.os.CancellationSignal, который можно передать некоторым из методов android.database.sqlite.SQLiteDatabase

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

SQLite предоставляет метод прерывания: http://www.sqlite.org/c3ref/interrupt.html

Хотя я не уверен, как бы вы назвали это в Android.

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

ASyncTask поддерживает отмену, и флаг должен отменять все, включая ваш SQL-запрос.

ASyncTask.cancel(boolean mayInterruptIfRunning)
...