防止重复服务中的并发

时间:2014-02-23 16:48:04

标签: android android-service

我正在使用IntentService将我的SQLite数据库(由内容提供商管理)与web服务同步。我的问题是当用户刷新屏幕时会触发服务,因此可能会有更多的服务同时运行。我担心这可能会导致并发问题:例如数据损坏。

我的问题是:是否有“Android”方法可以防止这种情况发生?或者我自己必须建立一个排队系统?我知道我可以将我的整个服务代码放在原子块中,但我正在寻找更优雅的东西。

谢谢!

2 个答案:

答案 0 :(得分:4)

IntentService已经为您处理了一个排队系统。来自documentation

  

所有请求都在一个工作线程上处理 - 它们可以作为   只要有必要(并且不会阻止应用程序的主循环),   但一次只能处理一个请求。

恕我直言,如果您想要一个更健壮,更优雅的解决方案来同步您的ContentProvider网络服务,您应该创建一个更强大的SyncAdapter(它甚至可以监控您的ContentProvider和触发webservice调用)。

答案 1 :(得分:1)

如果Intents正在触发该服务,那么它将遵循正常的生命周期,并且回调将在应用程序进程的主UI线程中被点击。该服务不会与多个实例重新生成。如果您在服务中生成自己的后台线程或AsyncTask来为您做一些繁重的工作(即处理您的数据),那么您需要相应地保护事物。