检测并发事件编辑
Detect concurrent event edits
我正在编写 SyncAdapter 来同步日历,并且想知道如何检测与同步并发的编辑。我没有在文档中找到任何有关此案例的信息。
示例:1) SyncAdapter 从日历提供程序获取包含所有脏事件的游标,2) 同步它们以及 3) 重置脏标志。在 1) 和 3) 之间,用户修改了其中一个脏事件。本次修改不会同步,因为脏标志在编辑后被重置!
我知道联系人提供程序有一个可用于此的版本字段。日历提供商呢?
这是一个 "hacky" 解决方案(我自己没有尝试过)。
在执行第 1 步之前,将所有行的 DIRTY
字段的值替换为 2
(或 0
和 1
以外的任何值)其中有 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" 那些未修改的事件。
我正在编写 SyncAdapter 来同步日历,并且想知道如何检测与同步并发的编辑。我没有在文档中找到任何有关此案例的信息。
示例:1) SyncAdapter 从日历提供程序获取包含所有脏事件的游标,2) 同步它们以及 3) 重置脏标志。在 1) 和 3) 之间,用户修改了其中一个脏事件。本次修改不会同步,因为脏标志在编辑后被重置!
我知道联系人提供程序有一个可用于此的版本字段。日历提供商呢?
这是一个 "hacky" 解决方案(我自己没有尝试过)。
在执行第 1 步之前,将所有行的 DIRTY
字段的值替换为 2
(或 0
和 1
以外的任何值)其中有 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" 那些未修改的事件。