2012-08-24 3 views
0

내 코드에 일부 sqlite 연산자가 있습니다. 나는 SQL을 실행한다. 500 rows이있다. 실행 및 행 수신 시간이 매우 짧지 만 cursor.close() 함수를 호출하면 10 초이 걸립니다.sqlite cursor.close가 너무 많은 시간이 걸립니다.

어떻게하면이 시간을 줄일 수 있습니까?

Cursor cursor = database.rawQuery(sql, null); 
while(cursor.moveToNext()){ 
    String str1 = cursor.getString(0); 
    String str2 = cursor.getString(1); 
    System.out.println(str1+" and "+str2); 
} 
cursor.close(); // this line takes 13 seconds. but above code takes only 200 ms 

코드는 당신이 활동 클래스의 방법 startManagingCursor(Cursor c)를 사용하는 것이 좋습니다가이

+0

커서를 닫는 대신 데이터베이스 개체를 닫으시겠습니까 ?? – user370305

+0

아니요, 시도하지 않습니다. 하지만 다음 쿼리를 위해 데이터베이스 개체가 필요합니다. – Adem

답변

1

같은 것입니다. 활동 .. 활동의 라이프 사이클에 따라 당신을 위해이 방법이 사용되지 않습니다

public void startManagingCursor (Cursor c) 
Since: API Level 1 

양식 문서 StartManagingCursor을 ... 커서를 처리 할 수 ​​있습니다. 대신 새로운 CursorLoader 클래스를 LoaderManager와 함께 사용하십시오. 이것은 이전 버전의 플랫폼에서도 Android 호환성 패키지를 통해 사용할 수 있습니다.

이 메소드를 사용하면 활동이 활동의 ​​수명주기를 기반으로 주어진 Cursor 라이프 사이클을 관리 할 수 ​​있습니다. 즉, 활동이 중지되면 주어진 Cursor에서 deactivate()를 자동으로 호출하고, 나중에 다시 시작할 때 requery()를 호출합니다. 활동이 파괴되면 관리되는 모든? 서가 자동으로 닫힙니다.

HONEYCOMB 이상을 타겟팅하는 경우 대신 getLoaderManager()을 통해 LoaderManager을 사용하는 것이 좋습니다.

관련 문제