intentService会导致活动出现并发问题

时间:2015-02-09 22:17:42

标签: android android-service android-intentservice

我已经读过IntentService为要完成的工作创建工作线程。如果我理解正确,那么这意味着工作将在除UI线程之外的线程上完成。我的问题是

如果我的活动是尝试更新共享首选项,并且此intentService也更新共享首选项,那么这意味着我将遇到并发问题。正确?所以我更好地使用Service而不是IntentService,因为它在主UI线程上运行

请确认我的理解是否正确

1 个答案:

答案 0 :(得分:2)

  

我已经读过IntentService为要完成的工作创建工作线程。如果我理解正确,那么这意味着工作将在UI线程以外的线程上完成。

正确。

  

如果我的活动是尝试更新共享首选项,并且此intentService也更新共享首选项,那么这意味着我将遇到并发问题。正确?

AFAIK,SharedPreferences是线程安全的。因此,它将取决于这两个组件正在更新的内容。如果他们在单独的键下更新值,AFAIK你应该没问题。但是,如果它们可能正在修改相同键的值,那么您可能会遇到问题(脏读和诸如此类)。

  

所以我更好地使用Service而不是IntentService,因为它在主UI线程上运行

在Java中,对象不会在线程上“运行”。方法在线程上运行。因此,服务不会在“主UI线程”上运行。在主应用程序线程上调用所有服务的生命周期方法(例如,onCreate()onStartCommand())。这包括IntentServiceIntentService碰巧有onStartCommand()的内置实现,可将Intent路由到后台线程。

除此之外,不要在主应用程序线程上执行磁盘I / O,包括写入SharedPreferences

如果您可能从多个线程写入SharedPreferences上的相同键,请使用并发编程技术。 Java线程已经和Java一样长,并且a lot written关于如何在Java中进行适当的并发编程。