2014-01-28 1 views
1

В onHandleIntent моего моего класса IntentService я создал дескриптор, содержащий runnable, который должен быть выполнен через 20 секунд. К несчастью, мое служение спит или разрушается до этого периода. Я пробовал также с CountDownTimer, но у меня была та же проблема. У кого-нибудь есть идея, я могу заставить onHnadleIntent ждать? Спасибо!сделать IntentService не спящим, пока он не выполнит handler.postDelayed runnable

Это код:

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() на примере Service, чтобы закрыть его.

+1

спасибо. –

+0

спасибо lottttttt !!! – prasanthMurugan

+0

Это же проблема, это правильно? https://stackoverflow.com/questions/36949239/handler-postdelayed-is-not-working-in-onhandleintent-method-of-intentservice Почему именно вы знаете? В основном, мое приложение все еще находится на переднем плане, и экран все еще включен, и все же это не работает ... создание нового HandlerThread для сетевых задач, когда доступно IntentService, похоже на излишний шум, если не существует солидной причины. Pls ... –

1

Вам нужно остановить onHandleIntent от возвращения до завершения Runnable. Это может быть достигнуто с помощью CountdownLatch, который ожидает в конце вашего метода onHandleIntent и будет выпущен в конце метода run.

ПРИМЕЧАНИЕ: это приведет к тому, что служба намерения не обработает другие намерения, которые вы отправили, до тех пор, пока предыдущий не завершит (через 20 секунд).

Вы также можете получить частичный вакелон в начале onHandleIntent и отпустить его в конце.

+0

Благодарим за отзыв! Я не знаю, будет ли это работать для меня или нет, я не пробовал. Надеюсь, это поможет другому. –