2011-02-06 3 views
2

한동안 실행되는 IntentService가있는 앱이 있습니다. 둘 다 함께 실행되면 데이터베이스에 쓰는 SQL 문이 서로 트립됩니다 (데이터베이스가 잠겨 오류가 발생 함). 앱이 충돌합니다.동시에 액티비티와 서비스가 DB에 쓸 수 있습니까?

활동과 서비스가 동일한 데이터베이스 연결을 공유하는 방식이 있습니까?

+3

콘텐츠 공급자를 사용하십시오. – Falmarri

+0

콘텐츠 제공 업체를 사용하고 공유 된 'SQLiteDatabase'를 사용해야합니다. ContentProviders는 스레드로부터 안전하지 않습니다. 잠금이 발생하는지 확인해야합니다 (즉, 'SQLiteDatabase'가 허용). –

답변

4
  1. Falmarri가 제안한 것처럼 콘텐츠 공급자를 사용할 수 있습니다.

  2. 표준 Java 스레드 동기화 옵션 (예 : java.util.concurrent, synchronized 키워드)을 사용하여 액세스를 동기화하십시오.

  3. 활동이 데이터베이스에 쓰고 있지 않아야합니다. 활동은 IntentIntentService으로 보내야하고 으로 작성되어야합니다.

+0

전적으로 동의합니다. 옵션 3은 또한 I/O가 약간의 시간이 걸릴 때 jankiness를 피합니다. NAND에 쓰기는 (300ms 정도에서와 같이) 오랜 시간이 걸릴 수 있으며, 그 시간에는 사용자 입력에 반응하지 않습니다. –

관련 문제