3

SQLite 데이터베이스를 사용하여 Android 애플리케이션에 데이터를 저장하고 싶습니다. 문제 없어. 그러나 사전 정의 된 간격 (매일 10, 14, 18, 22시 방향)으로 데이터베이스에 액세스해야하는 IntentService을 실행하고 싶습니다.Android의 다중 데이터베이스 연결 (작업 및 서비스에서)

IntentService이 시작될 때 응용 프로그램을 사용하면 Activity에 하나의 데이터베이스 연결이 활성화되고 IntentService에 하나의 데이터베이스 연결이 설정되므로 문제가 발생합니다. 따라서 데이터베이스가 잠기고 IntentService이 실패합니다. 맞습니까?

는 내가 그 달성 방법,이 경우, IntentService은 현재 작업 (SELECT, UPDATE 등)을 완료 할 Activity을 대기 한 후 정상적으로 실행?

내 활동에서 onCreate에 데이터베이스 연결을 열고 onDestroy에 닫습니다. 그 동안 IntentService가 데이터베이스에서 작동 할 기회가 없다는 의미입니까?

답변

4

따라서 데이터베이스가 잠기고 IntentService가 실패합니다. 맞습니까?

개체가 동시에 다른 SQLiteDatabase 개체에서 작업을 수행하는 경우 그렇습니다.

이러한 경우, IntentService는 현재 작업 (SELECT, UPDATE 등)을 마치기를 기다렸다가 정상적으로 실행됩니까?

이 있는지 싱글, 사용자 정의 Application 객체, 또는 ContentProvider를 통해, 활동 및 서비스 모두에 대해 하나의 SQLiteOpenHelper 인스턴스를 사용합니다.

+0

대단히 감사합니다! 커스텀'Application' 클래스는 좋게 들립니다. 그러나이 사용자 정의 클래스를 사용할 때 작성 및 종료시기는 언제입니까? – caw

+0

@MarcoW :'Application'의'onCreate()'에서 데이터베이스를 열어 보거나, (백그라운드 스레드에서만) 알맞은 것처럼 느슨하게 만드십시오. 'SQLiteOpenHelper'가 프로세스가 종료 될 때 다른 모든 것들과 함께 버려지 게하는 것은 가능하다. – CommonsWare

+0

완벽하게 작동했습니다. 감사합니다! 정말 데이터베이스 객체 나 SQLiteOpenHelper에서 close()를 호출하지 않습니까? 데이터베이스에 삽입 된 데이터가 손실되지 않도록 안전합니까? 그들은 즉시 저지른 것입니까? – caw

관련 문제