2014-01-28 5 views
1

내 IntentService 클래스의 onHandleIntent에서 20 초 후에 실행되어야하는 실행 파일을 포함하는 핸들을 생성했습니다. 불행히도 내 서비스는이 기간 전에 잠들거나 파괴됩니다. CountDownTimer도 시도했지만 동일한 문제가있었습니다. onHnadleIntent 대기를 만들 수있는 사람이 있습니까? 고맙습니다!IntentService가 handler.postDelayed 실행을 수행 할 때까지 휴면 상태가되지 않도록하십시오.

public class MyService extends IntentService { 
    //... 
    @Override 
    protected void onHandleIntent(Intent workIntent) { 
     Handler handler = new Handler(); 
     handler.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      Log.i("20 seconds later","I am here"); 
      } 
     }, 20000); 
     //... 
    } 
    //... 
} 

답변

4

IntentService를 사용하지 마십시오 :

는 코드입니다. 그것은 당신의 시나리오를 위해 설계되지 않았습니다. 일반 Service을 사용하십시오. 코드를 onStartCommand()에 입력하십시오. run() 메서드의 맨 아래에있는 인스턴스에서 stopSelf()을 호출하여 종료하십시오.

+1

대단히 감사합니다. –

+0

감사합니다. – prasanthMurugan

+0

이것은 같은 문제입니다. 맞습니까? https://stackoverflow.com/questions/36949239/handler-postdelayed-is-not-working-in-onhandleintent-method-of-intentservice 정확히 알고 계십니까? 기본적으로, 내 애플 리케이션은 여전히 ​​포 그라운드에서 화면 여전히 켜져 있지만 여전히 작동하지 않습니다 ... IntentService 사용할 수있을 때 네트워크 작업에 대한 새로운 HandlerThread 만들기 과장된 소리가 단단한 이유가 거기 있지 않는 한 소리. Pls ... –

1

RunHable이 완료 될 때까지 onHandleIntent가 반환되지 않도록해야합니다. 이는 onHandleIntent 메소드가 끝날 때까지 기다리는 CountdownLatch를 사용하여 수행 할 수 있으며 run 메소드가 끝날 때 해제됩니다.

참고 : 이로 인해 인 텐트 서비스는 이전 인바운드가 완료 될 때까지 (20 초 후) 전송 한 다른 인 텐트를 처리하지 않게됩니다.

onHandleIntent가 시작될 때 부분 웨이크 록을 가져 와서 끝에서 놓을 수도 있습니다.

+0

응답 해 주셔서 감사합니다! 그것이 나를 위해 일할 것인가 아닌지를 나는 모른다. 나는 그것을 시도하지 않았다. 나는 그것이 다른 하나를 돕기를 바란다. –