为什么要在IntentService上使用服务?

时间:2014-11-17 15:19:48

标签: android android-service android-syncadapter android-background

为什么以下Google提供的SyncService示例使用的是Service而不是IntentService?我的理解是IntentServices在后​​台运行,而常规Service将在主线程中运行。对于没有只更新数据的UI的东西,你为什么要在主线程中运行呢?这不是风险框架下降吗?

http://developer.android.com/training/sync-adapters/creating-sync-adapter.html#CreateSyncAdapterService

是否可以拥有独立的IntentService?还是需要基于在主线程上运行的东西?这是我能够理解为什么我们会使用上面的常规Service的唯一原因。

1 个答案:

答案 0 :(得分:3)

  

据我所知,IntentServices在后台运行,而常规服务将在主线程中运行。

对象不在线程上运行。做法。

IntentService继承自ServiceService上的主要生命周期方法,特别是onStartCommand()在主应用程序线程上调用。 IntentService碰巧提供了一个后台线程,用来调用onHandleIntent()方法,通过调用onStartCommand()触发。

  

对于没有只更新数据的UI的东西,你为什么要在主线程中运行?

你没有。

  

为什么以下Google提供的SyncService示例使用服务而不是IntentService?

因为此处IntentService不合适。引用您链接到的文档:

  

为此,您需要创建一个绑定服务,该服务将特殊的Android绑定器对象从同步适配器组件传递到框架。使用此绑定器对象,框架可以调用onPerformSync()方法并将数据传递给它。

IntentService并且绑定模式不能很好地协同工作。

从线程角度来看,由Android提供的onPerformSync() is called on a background thread。因此,即使基于绑定未排除IntentService,您也不需要另一个后台线程,因为onPerformSync()已在后台线程上调用。