Android SQlite manager singleton class

안드로이드 SQLite DB를 사용하다 보면 어쩔 수 없이 비동기 환경에서 디비를 오픈다고 닫는 행위(open – close)를 할 수 있다. 문제는 멀티 스레드 환경에서 각각 디비를 이용하려 하는 인스턴스를 생성하고 이에 대해 접근하여 io를 할 때 발생한다.

java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase

위와 같은 문제 있는 환경에서 SQLite에 접근하여 사용할 때 위와 같은 오류를 볼 수 있다.

이런 문제를 방지하기 위해서 SQLite의  manager클래스를 singleton 패턴으로 생성하고 사용하는 것을 추천 한다.  전체 예제 소스는 다음과 같다.

 

 

manifest에 등록한 앱의 Application 클래스 등에서 initializeInstance()메소드를 호출 한다.

 

필요하면 공통 부모 Activity나 Fragment클래스  등 에 필요한 메소드를 등록하여 호출 한다.

 

SQLite가 불편하거나 쿼리에 자신이 없다면 Realm을 추천한다. (난 쿼리 짜는것에 시간을 많이 투자하기 싫어서 Realm으로 갈아 탈 생각이다 :) )

 

 

 

You may also like

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다.