2011-04-21 4 views
3

내 안드로이드 응용 프로그램은 내 문장, 커서 및 데이터베이스를 공개하지 못했다고 불평하는 오류를 자주 기록합니다. 사실, 나는 그것을 사용하는 코드의 마지막에 {} 블록에있는 모든 커서를 명시 적으로 릴리스하고 있으며,이를 포함하고있는 클래스의 finalize() 메소드에서 데이터베이스를 닫을 것이다.Android : SQLite 데이터베이스 인스턴스를 닫을 때 걱정할 필요가 있습니까?

내 응용 프로그램의 구조로 인해 데이터베이스 개체 (finalizer 제외)에서 close() 메서드를 명시 적으로 호출하는 것이 매우 어려워집니다. 예를 들어 데이터베이스를 사용하는 클래스가 Activity 클래스가 아니기 때문에 활동에 의해 간접적으로 사용되는 클래스 일 수 있습니다. 그래서 그 클래스는 그것이 궁극적으로 붙어있는 Activity가 언제 파괴되는지 알지 못합니다.

이 문제에 대해 걱정해야합니까? 내 데이터베이스 인스턴스를 명시 적으로 닫지 않아서 일부 리소스가 누출 되었습니까? 어떤 것이 파일에 쓰여지지 않을 위험이 있습니까? Android에서의 SQLite 구현은 캐싱을 작성합니까? 이 기능을 끄거나 강제로 동기화 할 수 있습니까?

finalizers에 관한 Android VM의 정책은 무엇입니까?

프랭크

답변

1

나는 닫히지 않은 연결의 결과였다 내 응용 프로그램에 힘 가까운 문제를 발견했다. 필자의 경우 쿼리는 오랜 시간이 걸렸으며 사용자는 다시 액티비티로 돌아가서 새 쿼리를 다시 클릭 할 수있었습니다.

앱을 디버깅 할 때만 발견되었습니다. 실행 지점에서 가능하지 않다고 생각되는 코드로 끝났습니다.

단순히 연결을 끊으면 해결되었습니다. 긴 이야기는 오랫동안 깔끔한 것이 아플 수 없습니다. 어쨌든 당신은 단지 검증을 찾고 있다는 것을 알고 계셨습니까?

+1

예, 대개는 정리하지만이 경우 이미 존재했던 데이터베이스 기능을 추가하고있었습니다. non-gc 환경에서 얻을 수있는 소멸자 보호 호출에 대해 언급해야 할 것이 있습니다. 청소하기 좋은 곳. –

관련 문제