私は現在、同時実行をどのように処理するかをよりよく理解することを目的として、SQLiteDatabase と関連するクラスを調べています (私の現在のソリューションは機能しますが、同時実行が想定されているため、実際には冗長な作業を行っている可能性があるという印象を受けました)。は扱っていません)。
そうです、SQLiteOpenHelperのAndroidドキュメントについては、getWriteableDatabaseメソッドについて次のように述べています
正常に開くと、データベースがキャッシュされるため、データベースへの書き込みが必要になるたびにこのメソッドを呼び出すことができます。(データベースが不要になったら必ず close() を呼び出してください。)
何がキャッシュされているのかは少しわかりません(そのため、現在、キャッシュを実行するラッパーがあります)。それで、ここで何が起こっているのですか?2 つの SQLiteDatabase インスタンスは、キャッシュされた/静的なインスタンスのラッパーですか?
また、実際のロックはどのように処理されますか? 同じ SQLiteOpenHelper インスタンスによって作成された 2 つの別個の SQLiteDatabase インスタンスがある場合、これらはトランザクション上安全ですか? あるトランザクションで排他モードでトランザクションを開始し、別の SQLiteDatabase インスタンスで別のスレッドで別のトランザクションを開始した場合と同様に、最初のトランザクションが完了するまで 2 番目のトランザクションは開始されないと予想されます。これが仕組みですか?