코드에 대한 자세한 내용이 필요한 경우이를 제공 할 수 있습니다.안드로이드 SQLite 멀티 스레드 문제
우리는 액세스를 제공하는 앱 ABC가 aidl 바인더를 통해 Db를 수행합니다. 클라이언트 응용 프로그램 XYZ는 ABC 앱에서 DAO 구현에 대한 IPC 호출을 수행합니다. select, insert, update 및 delete와 같은 명령은 매우 잘 작동하지만 이러한 명령을 트랜잭션 아래에서 호출 할 때 문제가 발생합니다.
기본적으로 첫 번째 SQLiteDatabase.beginTransaction() 호출 - 하나의 바인더 객체를 통해 - SQLite의 새 트랜잭션이 설정되고 SQLiteDatabase.inTransaction() 메서드가 true를 반환합니다. 그런 다음 anyDAO.insert (...)를 호출하면 inTransaction()이 false를 반환하는지 확인합니다.
첫 번째 호출 (beginTransaction)이 TID # 1 스레드의 서비스에서 실행되었고 두 번째 호출 (TID # 2)이 다른 스레드에서 실행 되었음이 확인되었습니다. beginTransaction을 수행하고 단일 IPC 호출을 삽입하기 위해 코드를 변경 (테스트 만 수행)하지만 별도로 호출해야합니다.
질문 : SQLite는 다른 스레드에서 트랜잭션과 SQL 명령을 처리 할 준비가되어 있습니까? SQL documentation에서
이미 모든 AIDL 호출을 지정된 스레드로 리디렉션하는 작업 코드를 제공 했으므로 사용하지 마십시오. – pskink
@pskink 우리는 코드를 작성 중입니다. 그러나 시간이 흐르고 있기 때문에 우리는 다른 접근 방식으로 작업하는 다른 개발자를 설정하고 결국 우리는 해결책을 찾았습니다. 코드는 우리를 실제 해결책으로 이끌었습니다 (우리는 다른 질문에 결과를 게시 할 것입니다). 또한 우리는 SQLite에서 스레드에서 Transacion을 시작할 때 동일한 스레드에서 다른 명령을 수행해야한다는 것을 발견했습니다. 그렇지 않으면 트랜잭션이 없습니다. –