1

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

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

请确认我的理解是否正确

4

1 回答 1

2

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

正确的。

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

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

所以我更好的用户服务而不是 IntentService 因为它在主 UI 线程上运行

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

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

如果您可能正在SharedPreferences从多个线程写入相同的键,请使用并发编程技术。Java 线程的存在时间与 Java 差不多,并且有很多关于如何在 Java 中进行适当的并发编程的文章。

于 2015-02-09T22:41:51.257 回答