모두 learn 데이터베이스 연결과 같은 리소스는 늦게 수집되어 조기에 릴리스되어야합니다.한 스레드에서 SQLite 데이터베이스를 닫으면 다른 스레드에서 열린 데이터베이스가 깨집니다.
그러나 Android에서 SQLite 데이터베이스 연결에이 원칙을 적용하면 나에게 두통이 생깁니다.
정기적으로 데이터베이스에 업데이트를 작성하여 백그라운드에서 작동하는 서비스의 백엔드 서버에서 업데이트를 다운로드하는 앱이 있습니다. 나는 다음과 같은 순서가 발생했을 때 발생하는 경험 문제는 :
- 서비스는 쓰기 가능한 데이터베이스 연결 일부 활동이 읽을 수있는 데이터베이스 연결을 엽니 다
- 에게 개방
- 서비스 활동 데이터를 읽는 와 동시에 데이터베이스 연결 종료
- 데이터베이스 연결이 닫혀 활동이 실패했습니다.
서비스와 액티비티는 서로 다른 인스턴스를 사용하여 동일한 연결을 열기 위해 동일한 SQLiteOpenHelper
클래스를 사용합니다. 필자의 초기 가정은 이것이 정상적으로 작동해야했지만 어떻게 든 기본 연결이 두 데이터베이스 인스턴스간에 공유되는 것 같습니다.
문제를 해결하려면을 닫지 않고 열려있는 커서 만 닫으면서 이 종료되었습니다. 이것은 내가 여기에 기억을 새기고 있지 않다는 것을 확신하지 않지만 작동하는 것으로 보인다.
여기에 분명한 내용이 있습니까?
"동시에"는 무엇을 의미합니까? 서비스가 백그라운드 스레드로 실행되고 있습니까? –
@Graham : 그렇습니다. 언급했듯이, 서비스가 작동하는 것은 별도의 스레드에서 백그라운드에서 작업하고 있습니다. –
그리고 예, 동시에 "동시에"를 의미합니다. –