Alx*_*Alx 3 android android-syncadapter
不知怎的,我不明白查询参数CALLER_IS_SYNCADAPTER的工作概念.其默认值为false,如果设置,则不会自动设置DIRTY标志.那它究竟意味着什么呢?根据我的理解,联系人的每次更改都会导致将脏标志设置为1.在同步适配器完成作业后,使用插入/更新/删除CALLER_IS_SYNCADAPTER,插入/更新和删除的记录的脏标志应为0 , 是对的吗?
但是,如果我使用该可选参数调用查询,则条目将保留为标志1.
还有什么我必须做的,或者我理解它应该如何运作错误?或者有什么东西告诉系统同步已成功完成设置标志?
有没有人有进一步阅读的样本或建议?
CALLER_IS_SYNCADAPTER不一定会影响存储在数据库行中的内容,它取决于执行的命令.它不应该对查询产生影响.请勿在设备上的用户应用程序中使用它.
现在......它为什么存在?
它用于帮助notifyChange()/ ContentObservers/ContentResolver/Syncadapter集成.有两种用例可以更改数据库中的行.
如果屏幕上显示,则更改都需要更新UI.因此ContentResolver.notifyChange(Uri uri, ContentObserver observer, boolean syncToNetwork)被召唤.这会更新ContentObservers并告诉他们从ContentProvider DB获取最新数据.通话中的最后一个参数是你的线索.
ContentResolver本身就是一个ContentObserver.当它看到数据库发生变化时,会考虑启动SyncAdapter以将更改推送到网络.在案例1中这很好.在案例2中,它是多余的.这个变化来自网络,根本没有理由启动同步来发回更改.
Calendar.CALLER_IS_SYNCADAPTER是SyncAdapter执行的update()中使用的提示.如果是,则ContentProvider设置syncToNetwork为false,确保不执行冗余的第二次同步
第二个例子是veljko提到的.从服务器删除东西的最简洁方法是设置删除标志,然后执行同步.当CALLER_IS_SYNCADAPTER标志为false(用户应用程序)时,对delete()的调用将设置标志.当标志为真(发生同步)时,对delete()的调用会将删除推送到服务器并从本地DB中删除该行.只有一个delete()调用,此标志允许ContentProvider知道它应该执行哪个任务.
| 归档时间: |
|
| 查看次数: |
3627 次 |
| 最近记录: |