为什么SyncService
下面 Google 提供的示例使用 aService
而不是 a IntentService
?我的理解是IntentServices
在后台运行,而常规Service
将在主线程中运行。对于没有 UI 只更新数据的东西,你为什么希望它在主线程中运行?这不会有掉帧的风险吗?
有可能有独立的IntentService
吗?还是需要基于在主线程上运行的东西?这是我能明白为什么我们会在上面使用常规的唯一原因Service
。
为什么SyncService
下面 Google 提供的示例使用 aService
而不是 a IntentService
?我的理解是IntentServices
在后台运行,而常规Service
将在主线程中运行。对于没有 UI 只更新数据的东西,你为什么希望它在主线程中运行?这不会有掉帧的风险吗?
有可能有独立的IntentService
吗?还是需要基于在主线程上运行的东西?这是我能明白为什么我们会在上面使用常规的唯一原因Service
。
据我了解,IntentServices 在后台运行,而常规服务将在主线程中运行。
对象不在线程上运行。方法可以。
IntentService
继承自Service
。上的主要生命周期方法Service
,特别onStartCommand()
是在主应用程序线程上调用。IntentService
碰巧提供了一个后台线程,它用于调用您的onHandleIntent()
方法,由对onStartCommand()
.
对于没有 UI 只更新数据的东西,你为什么希望它在主线程中运行?
你没有。
为什么下面 Google 提供的 SyncService 示例使用的是 Service 而不是 IntentService?
因为 anIntentService
在这里不合适。引用您链接到的文档:
为此,您需要创建一个绑定服务,该服务将一个特殊的 Android 绑定器对象从同步适配器组件传递到框架。使用此绑定器对象,框架可以调用 onPerformSync() 方法并将数据传递给它。
IntentService
和绑定模式不能很好地协同工作。
从线程的角度来看,在Android 提供onPerformSync()
的后台线程上调用。因此,即使IntentService
没有根据绑定排除,您也不需要另一个后台线程,因为onPerformSync()
已经在后台线程上调用了。