我已阅读 IntentService 为要完成的工作创建工作线程。如果我理解正确,那么这意味着工作将在 UI 线程以外的线程上完成。我的问题是
如果我的活动正在尝试更新共享首选项并且此 intentService 也在更新共享首选项,那么这意味着我将遇到并发问题。正确的?所以我更好的用户服务而不是 IntentService 因为它在主 UI 线程上运行
请确认我的理解是否正确
我已阅读 IntentService 为要完成的工作创建工作线程。如果我理解正确,那么这意味着工作将在 UI 线程以外的线程上完成。我的问题是
如果我的活动正在尝试更新共享首选项并且此 intentService 也在更新共享首选项,那么这意味着我将遇到并发问题。正确的?所以我更好的用户服务而不是 IntentService 因为它在主 UI 线程上运行
请确认我的理解是否正确
我已阅读 IntentService 为要完成的工作创建工作线程。如果我理解正确,那么这意味着工作将在 UI 线程以外的线程上完成。
正确的。
如果我的活动正在尝试更新共享首选项并且此 intentService 也在更新共享首选项,那么这意味着我将遇到并发问题。正确的?
AFAIK,SharedPreferences
是线程安全的。因此,这将取决于这两个组件正在更新什么。如果他们在单独的键下更新值,AFAIK 你应该没问题。但是,如果他们可能正在修改相同键的值,那么您可能会遇到问题(脏读等)。
所以我更好的用户服务而不是 IntentService 因为它在主 UI 线程上运行
在 Java 中,对象不会在线程上“运行”。方法在线程上运行。因此,服务不会“在主 UI 线程上”运行。所有服务的生命周期方法(例如 , onCreate()
)onStartCommand()
都在主应用程序线程上调用。这包括IntentService
. 碰巧有一个将路由路由到后台线程IntentService
的内置实现。onStartCommand()
Intent
除此之外,不要在主应用程序线程上执行磁盘 I/O,包括写入SharedPreferences
.
如果您可能正在SharedPreferences
从多个线程写入相同的键,请使用并发编程技术。Java 线程的存在时间与 Java 差不多,并且有很多关于如何在 Java 中进行适当的并发编程的文章。