Обработка JobIntentService и спящего потока - PullRequest
0 голосов
/ 13 июня 2018

Справочная информация:

Недавно мне пришлось перенести службу в JobIntentService (JIS) для поддержки ограничений фоновой службы Android 8.0.Эта служба регистрирует токен на моем сервере после того, как FirebaseInstanceIDService вызывает его.

Проблема:

У меня есть сетевой вызов, который должен быть сделан из JobIntentService (JIS).Все операции сетевого вызова обрабатываются с помощью Eventbus (EB).

Процесс выглядит следующим образом:

JIS -> request API (EB) -> {API Call Handler} -> Send Response (EB) -> JIS -> Handle response. 

Проблема, как вы могли догадаться, заключается в том, что событие API запроса момента запускается, служба Intent завершает себя и не обрабатывает событие ответа.

Временное решение:

Я решил это грязным способом, вызвав Thread.sleep (400) сразу после запуска события. (APIна ответ требуется около 150 мс)

Это гарантирует, что JIS все еще будет в состоянии обработать ответ, к тому времени, когда событие ответа API достигнет.


Я хотел подтвердить, является ли это правильным подходом (так как для меня это было грубой силой) или существует более чистый подход.

1 Ответ

0 голосов
/ 13 июня 2018

В вашем JobService вы можете вернуть true из onStartJob (). Это означает, что у вас еще есть работа, чтобы JIS не завершил работу.как только вы получите ответ, вы можете вызвать finishJob () для завершения JIS.

...