我对IntentService和服务之间的区别有点困惑。我知道IntentService有一个工作队列,但是在一个服务上使用多个IntentService有什么好处吗?多意向服务或一个服务
下面是我的意思的例子。假设我希望我的应用程序从3个来源提取数据。我应该启动一个运行三个线程的服务,每个线程从各自的源代码中提取?或者我应该启动三个单独的IntentServices?
我对IntentService和服务之间的区别有点困惑。我知道IntentService有一个工作队列,但是在一个服务上使用多个IntentService有什么好处吗?多意向服务或一个服务
下面是我的意思的例子。假设我希望我的应用程序从3个来源提取数据。我应该启动一个运行三个线程的服务,每个线程从各自的源代码中提取?或者我应该启动三个单独的IntentServices?
IntentService只是一个方便的类,用于编写生产者 - 消费者模式中的工作人员的服务。它们是旨在连续执行各种任务然后停止的服务。服务不一定是IntentServices,例如必须保持活动的服务,如守护进程。
所以你应该怀疑你的服务是否接近工作者线程,如果是的话,使用IntentServices,否则就是从Service派生。
你的第二个问题是是否将所有3个服务分组在一个3合1服务中。答案是这取决于你如何使用你的数据源:如果你完全使用它们,那么将它们分组在一个服务中。如果单独使用它们,则可以为每个服务创建一项服务,以便在只使用一个数据源而不使用另一个数据源时提供较轻的服务。但是如果你使用全部3个数据源,每个数据源都在一个服务中,那么它将比使用单一服务更重。
它的我的理解是,intentService和Service之间的区别在于intentService会产生一个工作线程来运行它,而一个Service在主服务进程的主线程中运行。此外,intentService将在工作完成时自行停止,而Service将继续运行,直到stopSelf或stopService被调用。
如果3个数据源需要彼此共享信息,然后将它们全部放在同一个服务中,否则将它们保持分开,因为如果一个数据源关闭,它将使一个胖服务运行而不是仅仅一个灯服务。
要允许多个任务在主线程的同一时间运行,您需要提供一个受管理的线程集合。使用ThreadPoolExecutor同时管理多个线程:
http://developer.android.com/training/multiple-threads/create-threadpool.html