2012-07-01 2 views
0

몇 주 전에 앱을 출시했으며 많은 사용자가 앱의 낮은 속도에 대해 불평하고 있습니다. 앱을 테스트 할 때 태블릿을 사용하고 아무 문제없이 잘 작동합니다.Android Java : SQLite에서 커서가 에뮬레이터 및 일부 기기에서 느려짐

이제 Android 2.2의 에뮬레이터에서 앱을 테스트 한 결과 내 SQLite 데이터 베 이스에서 일부 데이터를로드하는 동안 앱 속도가 느린 것을 알았습니다. Cursor.moveToFirst() 메서드가 매우 느리고 에뮬레이터가 약 1 분 동결됩니다. 이것은 내 사용자가이 활동을 열거 나로드하는 동안 응용 프로그램의 속도가 느릴 때 힘이 가해진다고 나에게 말하는 이유를 입증하는 것일 수 있습니다.

하나의 값으로 최대 700 개의 열을로드하고 있습니다.

내가 뭘 잘못하고 있니?

+0

코드를 게시하면 많은 도움이됩니다. –

답변

0

쿼리는 기본적으로 UI 스레드에서 수행됩니다. 엄청난 양의 정보 (700 컬럼 분량)를 쿼리하고 있으며 상당한 시간 동안 UI 스레드를 차단하고있는 것 같습니다. CursorLoader 또는 AsyncTask을 사용하여 쿼리를 비동기 적으로 수행해야 UI 스레드를 차단하지 않아야합니다. UI 스레드가 4-5 초 동안 차단 된 경우 응용 프로그램이 "응답하지 않는 응용 프로그램"오류로 종료됩니다.

+0

일부 장치에서는 AsyncTask를 사용할 수 없습니다 ... AsyncTask는 SDK 11부터 사용할 수 있으며 많은 사용자가 SDK 10 이하를 사용하고 있습니다. 나는 CursorLoader – user1494865

+0

으로 테스트 할 것입니다. AsyncTask는 실제로 SDK 3부터 사용할 수 있습니다. http://developer.android.com/reference/android/os/AsyncTask.html –

+0

이제는 AsyncTask를 구현했습니다. UI가 더 빨라졌지만 Cursor에서 데이터를 읽는 데 많은 시간이 걸립니다. ... CursorLoader는 AsyncTask처럼 일종의 것 같습니다. 이게 옳은 거니? – user1494865

관련 문제