检测并发事件编辑

Detect concurrent event edits

我正在编写 SyncAdapter 来同步日历,并且想知道如何检测与同步并发的编辑。我没有在文档中找到任何有关此案例的信息。

示例:1) SyncAdapter 从日历提供程序获取包含所有脏事件的游标,2) 同步它们以及 3) 重置脏标志。在 1) 和 3) 之间,用户修改了其中一个脏事件。本次修改不会同步,因为脏标志在编辑后被重置!

我知道联系人提供程序有一个可用于此的版本字段。日历提供商呢?

这是一个 "hacky" 解决方案(我自己没有尝试过)。

在执行第 1 步之前,将所有行的 DIRTY 字段的值替换为 2(或 01 以外的任何值)其中有 DIRTY = 1.

即,在 SQL 中,这类似于

update events set DIRTY = 2 where DIRTY = 1 and account_type = 'account type'  and account_name = 'account name';

那么你只同步那些 DIRTY = 2.

当您重置 DIRTY 标志时,您只会对那些仍然有 DIRTY = 2 的标志执行此操作。

如果一个事件有 DIRTY = 1,它在中间被修改,您需要重新开始。

只要非同步适配器调用修改事件,CalendarProvider 就会设置 DIRTY = 1。您可以使用它来检测同步时的任何更改,并且仅检测 "acknowledge" 那些未修改的事件。