【发布时间】:2015-10-06 06:26:25
【问题描述】:
我一直在考虑这种情况。
假设我有一个 SQLite 数据库包裹在 ContentProvider 中,数据库中的数据通过 SyncAdapter 每 10 分钟运行一次发送到 Web 服务。
要知道哪些行已发送到 Web 服务,使用状态列(0 = 未发送,1 = 发送)。
应用 UI 是一个使用 LoaderManager.LoaderCallbacks 填充的列表,以及用户在其中输入数据的另一个视图(表单)。
SyncAdapter 使用onPerformSync 的ContentProviderClient 参数查询未发送的数据 (0) 并将行更新为已发送状态 (1)
我困惑的原因是已经发送的数据可以重新发送多次的场景。用户打开一个已发送的表单并编辑其数据,这会将状态列更改为 0,因此同步适配器选择已编辑的行。
现在,假设同步适配器选择一行并开始发送数据,同时用户打开相同的数据行,编辑一些列并更新。然后当 webservice 完成接收数据时,同步适配器将 state 列更新为 1。
现在该行包含不会发送的数据。对?
我应该在从同步适配器更新之前将我发送的所有数据与数据库中的数据进行比较,是这样吗?或者我可以使用该框架以更复杂的方式处理这种情况吗?
期待听到您在这种情况下的感受。
【问题讨论】:
标签: android multithreading sqlite android-contentprovider android-syncadapter