2012-05-30 4 views
1

IntentService 클래스의 포인트가 있다고 생각합니다. 서비스의 인스턴스가 너무 많이 또는 동시에 실행되는 것을 방지하는 큐를 처리합니다.거기에 하나 이상의 IntentService를 실행하는 방법이 있습니까?

다른 목적을 가진 IntentService의 클래스를 파생 시켰는데, 둘 다 서로 기다리지 않고 함께 실행되기를 바랍니다.

어떤 플래그가있는 경우 좋았어요 또는 내가 뭔가를 말할 것이다 설정할 수있는 속성 :이다

"너무 또는 의도 서비스의 더 diffrent 파생 클래스 자신의 큐에 각 하나를 실행 할 수 있습니다" 거기에 어떤 방식 으로든 할 수 있습니까?

"일반"서비스, 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; 
     } 
    } 
} 

다음 Activity에서

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

를 호출. 그들은 둘 다 동시에 달릴 것입니다.

+0

좋은 답변을 주셔서 감사합니다.하지만 확실합니까? 나는 다른 결론을 내릴 수있는 자신의 테스트를 만들었 기 때문에 (잘못된 가정을했을 수도있다 ...) –

+1

[IntentService.java] (https://github.com)의 소스 코드를 볼 수있다. /android/platform_frameworks_base/blob/master/core/java/android/app/IntentService.java) github에서 - 클래스의 각 인스턴스에 대한 핸들러 스레드를 만들고 인스턴스간에 아무 것도 공유하지 않습니다. 즉, 하위 클래스는 부모 클래스와 독립적으로'onHandleIntent'를 호출합니다. – Jens

+0

대단히 감사합니다. 그것은 내 나쁜 .. –

관련 문제