2010-08-11 5 views
2

내 Android 애플리케이션 사용자는 가져온 데이터로 데이터베이스를 채우고 미리 정의 된 복잡한 SQL 쿼리를 수행 할 수 있습니다. 일부 데이터 패턴에서는 검색어가 매우 오래 걸리며 (HTC Hero에서는 분 이상), 일반적인 사용은 10-15 초를 초과하지 않습니다.안드로이드 : 취소/중단/보류중인 SQLite 쿼리 중단 방법?

Android에서 보류중인 SQLite 쿼리를 취소 할 수있는 방법이 있습니까? 타임 아웃이 좋을지라도 부분 결과는 필요하지 않습니다. 내에서 쿼리를 수행하고 있습니다 AsyncTask.doInBackground()

최적화 된 쿼리 또는 앱 로직을 변경하는 것이 가장 좋지만,이 경우 결과는 사용자 지식에 따라 달라 지므로 문제가되는 패턴을 입력하는 사람들을 돕고 싶습니다.

답변

0

ASyncTask는 취소를 지원하며 플래그는 SQL 쿼리를 포함하여 모두 취소되어야합니다. http://www.sqlite.org/c3ref/interrupt.html

난 당신이 비록 안드로이드에 그 전화를 얼마나 잘 모르겠어요 :

ASyncTask.cancel(boolean mayInterruptIfRunning) 
+5

의 몇 가지 방법으로 전달 될 수 android.os.CancellationSignal를 사용하여 SQLite는에서 실행중인 쿼리를 취소 할 수 있습니다. AsyncTask 플로우가'onCancelled()'를 통해 반환되기 때문에'doInBackground()'의 코드는 실제로 그대로 남아 있지만, 커서는 여전히'moveToFirst()'에서 멈추고 전체 CPU를 빨아들입니다. SQLiteDatabase 나 SQLiteOpenHelper를 닫으려고했지만'moveToFirst()'가 끝날 때까지이 객체에 대한 호출이 실행을 차단합니다. 그리고 커서에는 "취소"방법이 없습니다. – tomash

+1

그래, 고마워, 그렇지 않을 거라 생각 했어. – WarrenFaith

0

SQLite는은 intrerupt 방법을 제공한다.

2

대기중인 sql 쿼리를 취소 할 수 없습니다. 그것은 SQLite 엔진에서 이루어집니다. SQLite는 쿼리를 인터럽트하기위한 네이티브 메소드를 가지고 있지만 java 인터페이스에서는 액세스 할 수 없습니다.

최상의 성능은 쿼리 성능을 향상시키는 것입니다.
읽기 : http://www.sqlite.org/cvstrac/wiki?p=PerformanceTuning

행 번호를 제한하여 장기 실행 쿼리를 더 작게 나눌 수 있습니다. 그러면 청크로 수행되는 쿼리를 취소하는 것이 더 쉬울 것입니다.

0

당신이 충분하지 android.database.sqlite.SQLiteDatabase

관련 문제