我正在使用SyncAdapter开发RESTful Android应用。我观看了一些截屏视频并阅读了一些教程,但它们只涉及基本动态。在开始编写代码之前,我想尝试从专家用户那里收到关于并发问题的反馈。
步骤1.用户U
将新条目E
插入数据库的表T
。该条目有一列status = TO_SYNC
。
步骤2.在同步条目E
之前,U
决定修改它。活动A
开始修改E
的列值。
步骤3.当用户修改条目时,SyncAdapter启动并将带有status == TO_SYNC
的条目发送到服务器。对于每个条目,SyncAdapter
在收到服务器的肯定答复后设置status = SYNCED
。
步骤4.假设对同一条目E
的并发访问导致冲突:
E
,将E
发送到服务器A
完成,并将E
状态设置为TO_SYNC
status
E
设置为SYNCED
E
的新值将不会同步,因为SyncAdapter已覆盖了值TO_SYNC
。我的问题是:如何在不同步时使用begin/end transaction
阻止整个数据库来避免此类问题(可能需要很长时间才能完成)?我是否应该依靠单个条目的经典java锁定?有更优雅的方式吗?
答案 0 :(得分:0)
您可以根据时间戳(称之为LAST_UPDATED_TIME
)而不是简单标志同步到服务器,并将其与另一列(称为HASH
中的标志一起)存储连接的哈希值一行中所有值的字符串。通过这个,您可以检查自上次同步以来的时间戳,获取要同步的增量数据并同步到服务器(当然是在一个单独的线程中),当您返回结果时,您将执行以下步骤:
LAST_UPDATED_TIME
字段答案 1 :(得分:0)
另一种方式,第二列" updated_at"