ContentProvider和多线程

时间:2015-10-06 06:26:26

标签: android multithreading sqlite android-contentprovider android-syncadapter

我一直在考虑这种情况。

假设我的SQLite数据库包含在ContentProvider中,数据库中的数据将被发送到每10分钟运行一次的SyncAdapter的Web服务。 要知道哪些行已发送到Web服务,将使用状态列(0 =未发送,1 =已发送)。

应用UI是使用LoaderManager.LoaderCallbacks填充的列表,以及用户输入数据的另一个视图(表单)。

SyncAdapter使用onPerformSync的{​​{1}}参数来查询未发送的数据(0)并将行更新为已发送状态(1)

我混淆的原因是可以多次重新发送已发送数据的情况。用户打开已发送的表单并编辑其数据,这会将状态列更改为0,因此syncadapter会选择已编辑的行。

现在,假设同步适配器选择一行并开始发送数据,同时用户打开相同的数据行,编辑一些列并进行更新。然后,当webservice完成接收数据时,同步适配器会将状态列更新为1。

现在该行包含不会发送的数据。对?

我应该只是比较我从同步适配器更新之前发送的所有数据与数据库中的数据,这是方法吗?或者我可以使用框架以更复杂的方式处理这种情况吗?

期待听到您对这种情况的体验。

2 个答案:

答案 0 :(得分:2)

您发现您有两种以上的状态:

  • 已更改且必须发送(或重新发送)的行;
  • 已发送但尚未知道服务器已接受的行;和
  • 服务器接受的行。

答案 1 :(得分:1)

作为@CL。正确地说你有超过2个州。

一个简单的解决方案可以锁定在转换过程中编辑的行。