有没有办法在一个运行一个以上的IntentService?

时间:2012-05-30 13:32:51

标签: android multithreading android-service intentservice

我想我已经明白了IntentService类。它处理一个队列,防止太多或多个服务实例一起执行。

我发现它很有用,但是如果我从IntentService派生了太多派生用不同目的的类,我希望它们一起运行而不等待彼此呢?

如果有任何我可以设置的标志或属性,那就太好了,它会说:“允许太多或更多不同的派生类意图服务在自己的队列中运行每一个”

有没有办法做到这一点?

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

提前感谢。

1 个答案:

答案 0 :(得分:2)

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

例如,给定服务ServiceA

public class ServiceA extends IntentService {
   ...
}

ServiceA的子类恰当地命名为ServiceB

public class ServiceB extends ServiceA {
}

ServiceBServiceA共享执行者/队列(或任何其他),即两者都可以在同时。您可以通过在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

。它们都将在同一时间运行。