2

Activity의 별도 스레드 (예 : AsyncTask)에서 SQLiteDatabase 데이터베이스에 액세스하고 항상 합법적 인 상태로 두어야합니까? 안드로이드에서 별도의 스레드로 데이터베이스에 액세스

만약 내가 제대로 이해하고

는 스레드가 어떤 순간에 사망 할 수 있고 데이터베이스는 잠재적으로 IllegalStateException 제공 열려 있습니다 (생성 의 SQLiteDatabase 및 닫지 않습니다)는 후자의 시간에.

어떻게 처리합니까?

답변

0

, 다음 Activity는 적절한 시간에 AsyncTask을 취소 할 수 있습니다 .

AsyncTask (또는 Thread)이 Activity에 의해 관리되지 않는 경우 문제가있어 아키텍처를 다시 설계해야합니다.

0

두 가지 방법 :

  1. 당신은 거기 Runtime.addShutdownHook(..)과 가까운 데이터베이스를 등록 할 수 있습니다.

  2. Application 사용자 지정을 만들고 데이터베이스를 닫는 onLowMemory()을 구현하십시오. 당신의 AsyncTaskActivity에 의해 관리되는 경우에는 DB 닫을 수있는 위치 때문에 AsyncTask.onCancelled()가 호출됩니다 (이 Activity.onPause() 후 예, OS에 의해 살해 될 취약 될 때)

+0

모든 활동이 삭제 된 후에 addShutdownHook이 항상 실행된다는 보장이 있습니까? – hpique

관련 문제