我正在使用 SyncAdapter 开发一个 RESTful Android 应用程序。我观看了一些截屏视频并阅读了一些教程,但它们仅涉及基本动态。在开始编写代码之前,我想尝试从专家用户那里获得有关并发问题的反馈。
步骤 1. 用户在数据库表中U
插入一个新条目。该条目有一列。E
T
status = TO_SYNC
E
步骤 2. 在同步条目之前,U
决定对其进行修改。一个活动A
开始用于修改 的列值E
。
步骤 3. 当用户修改条目时,SyncAdapter 启动并将条目发送status == TO_SYNC
到服务器。对于每个条目,一旦收到来自服务器的肯定回答,就会设置SyncAdapter
。status = SYNCED
第 4 步。假设对同一条目的并发访问E
会导致冲突:
- SyncAdapter 读取
E
,发送E
到服务器 - 活动
A
完成并将E
状态设置为TO_SYNC
- SyncAdapter 从服务器接收到 ok 并将
status
of设置E
为SYNCED
- 此时
E
将不会同步 的新值,因为该值TO_SYNC
已被 SyncAdapter 覆盖。
我的问题是:如何在不阻塞整个数据库的情况下避免这样的问题,begin/end transaction
同时同步(这可能需要很长时间才能完成)?我应该在单个条目上使用经典的 java 锁吗?有没有更优雅的方式?