2012-05-30 109 views
1

我想我已经有了IntentService类的意思。它处理一个队列,以防止太多或更多的服务实例一起执行。有没有一种方法可以运行多个IntentService?

我发现它很有用,但是如果我的IntentService派生类具有不同的用途,并且我希望他们两个一起运行而不相互等待呢?

这是如果有任何标志大或属性我可以设置,会这样说:“让太以上不同势派生类的意图服务,以他自己的队列中运行的每一个”

是有没有办法做到这一点?

我知道所有其他的选择,如“常规”服务,AsyncTesk,手动管理线程,所以请不要建议我考虑使用它们。我知道他们的优点和局限性。

在此先感谢。

回答

2

没有什么能阻止两个IntentService一起执行。

作为一个例子,给定的服务,ServiceA

public class ServiceA extends IntentService { 
    ... 
} 

ServiceA一个子类恰当地命名为ServiceB

public class ServiceB extends ServiceA { 
} 

ServiceB份额的执行器/队列(或任何除此之外)与ServiceA,即两者可以在同一时间执行。您可以通过在ServiceA(例如,

protected void onHandleIntent(Intent intent) { 
    for (int i = 0; i < 20; i++) { 
     System.out.println(getClass().getSimpleName() + " says hello"); 
     try { 
      Thread.sleep(2000L); 
     } catch (InterruptedException e) { 
      return; 
     } 
    } 
} 

,然后调用

startService(new Intent(this, ServiceA.class)); 
startService(new Intent(this, ServiceB.class)); 
Activity

。他们将同时运行。

+0

感谢您的良好回答,但您确定吗?因为我创建了自己的测试,这让我得出了不同的结论(可能我做出了错误的假设......) –

+1

您可以查看[IntentService.java]的源代码(https://github.com /android/platform_frameworks_base/blob/master/core/java/android/app/IntentService.java)在github上 - 它为类的每个实例创建一个处理线程,并且在实例之间共享任何东西,即一个子类将执行其中的任何内容独立于父类的'onHandleIntent'。 – Jens

+0

非常感谢。这是我的坏事.. –

相关问题