我想在我的应用中添加SyncAdapter,以最少的电池使用来更新服务器端数据。为此,我需要让我的应用程序的主要活动将数据写入某个共享存储位置,然后SyncAdapter可以使用onPerformSync(...)方法读取。
我正在尝试找出最适合存储此数据的位置,并提出以下问题:
假设我必须担心任何类型的线程安全,我对the different data storage options提出以下问题:
除此之外:为了最大限度地提高我的应用的兼容性,我不想使用任何大于5级的API。
答案 0 :(得分:1)
我认为,应该可以使用ContentProvider解决此问题。
ContentProviders本身并不解决多线程问题,如文档中所述:
数据访问方法(例如insert(Uri, ContentValues)和update(Uri, ContentValues, String, String[]))可以同时从多个线程调用,并且必须是线程安全的。其他方法(例如onCreate())仅从应用程序主线程调用,并且必须避免执行冗长的操作。请参阅方法描述了解其预期的线程行为。
但是,除非使用android:multiprocess=true
声明ContentProvider,否则 只应该是ContentProvider的单个实例(如果我理解正确的话),或者至少所有实例都将存在在同一个过程中,即 应该在类定义中访问相同的静态字段。
有了这个,它应该可以使用standard Java synchronization features来管理对存储支持资源的访问。
如果我遗漏了某些内容,请发表评论......
旁白:为什么所有"应该"?
不幸的是,由于使用了Android的文档,我绝不会100%确定它的可靠性或完整性。这里的示例:上面的引用声明" [o]其他方法(例如onCreate())仅从应用程序主线程调用" ...当我设置android:multiprocess=true
时会发生什么?那里的文档声明"如果此标志设置为“真实”,则系统可以在每个进程中创建一个实例,其中客户端希望与其进行交互"。这会导致从该应用程序的主线程以外的线程调用onCreate()吗?也许... 的