SyncAdapter を使用して RESTful Android アプリを開発しています。いくつかのスクリーンキャストを見て、いくつかのチュートリアルを読みましたが、基本的なダイナミクスしか扱っていません。コードを書き始める前に、専門家のユーザーから並行性の問題についてフィードバックを受けたいと思います。
ステップ 1. ユーザーはデータベースのテーブルにU新しいエントリを挿入します。エントリには列があります。ETstatus = TO_SYNC
ステップ 2. エントリEが同期される前に、エントリUを変更することを決定します。Aの列の値を変更するためのアクティビティが開始されますE。
ステップ 3. ユーザーがエントリーを変更している間に、SyncAdapter が始動し、エントリーをstatus == TO_SYNCサーバーに送信します。エントリごとに、サーバーから肯定的な応答を受け取ると、SyncAdapterセットが設定されます。status = SYNCED
ステップ 4. 同じエントリへの同時アクセスEによって競合が発生するとします。
- SyncAdapter は を読み取り、サーバー
Eに送信しますE - アクティビティ
Aが完了し、EステータスがTO_SYNC - SyncAdapter はサーバーから ok を受け取り、
statusofEをに設定します。SYNCED - この時点では、値が SyncAdapter によって上書きされているため、新しい値は
E同期されません。TO_SYNC
私の質問は、begin/end transaction同期中にデータベース全体をブロックせずにこのような問題を回避するにはどうすればよいですか (完了するまでに時間がかかる可能性があります)。単一のエントリに対して従来の Java ロックを使用する必要がありますか? もっとエレガントな方法はありますか?