2011-09-11 4 views
6

웹 서비스 호출을 대기중인 IntentService가 있습니다. 나는 각 웹 서비스 호출의 유형을 정의하는 각 Intent와 함께 Extra로 정수를 전달한다.onHandleIntent 전의 IntentService 인 텐트 캡처

특정 웹 서비스를 수행 할 인 텐트가 IntentService로 전달되고 동일한 웹 서비스의 인 텐트가 이미 IntentService 큐에 존재하는 경우 인 텐트가 처리되지 않는 상황을 만들고 싶습니다. 이상적으로는 인 텐트를 버리 겠지만 인풋이 처리되면 인 코드를 건너 뛰도록 코드에 알리는 추가 기능을 추가 할 수도 있습니다. 인 텐트가 들어올 때 IntentService에 추가하는 개체의 큐에있는 큐를 추적 할 수있었습니다.

그러나 IntentService로 전달 될 때 의도를 가로채는 장소가 보이지 않습니다. 내가 말할 수있는 한, onHandleIntent가 호출되고 너무 늦을 때만 만질 수 있습니다.

아이디어가 있으십니까?

답변

5

그것의 엄격 것이 좋습니다 말하기 아니지만, 나는이 같은 것을 건의 할 것입니다 :

public int onStartCommand (Intent intent, int flags, int startId) 
{ 
    // do your intent modification here 
    //if(intentIsDuplicate(intent)) 

    // make sure you call the super class to ensure everything performs as expected 
    return super.onStartCommand(intent, flags, startId); 
} 

는 작동하는지 알려주세요.

+0

이 메서드는 IntentService 설명서에서 보았습니다. 그러나이 메서드를 호출 할 때는 확실하지 않았습니다. 나는 또한 그것이 오버라이드되지 않는다는 것을 알아 차렸다. 왜 그런가? – Andrew

+0

기본적으로 내부 onStartCommand' 호출은 대기열을 처리합니다 : 당신이 그것을 오버라이드하고 실제로 수퍼 클래스의 메소드를 호출했는지 확인해야한다면 괜찮을 것입니다. – Femi

+0

이것이 정상적으로 작동하는 것 같습니다. Key가 호출되는 웹 서비스의 유형을 나타내는 Integer이고 값은 해당 호출에 대한 Intent가 대기열에 존재하는지 여부를 나타내는 부울입니다. onStartCommand에서 들어오는 인 텐트가 이미 큐에있는 호출인지 확인합니다. 그럴 경우 추가로 "건너 뛰기"를 추가합니다. onHandleIntent에서 "skip"을 확인하고 코드가 있으면 건너 뜁니다. 그러나 onHandleIntent를 떠나기 전에지도를 업데이트하고 해당 키의 값을 false로 설정합니다. – Andrew