2016-06-07 11 views
4

첫 번째 JobService를 구현하려고합니다. onStartJob에 대한 전화가 실제로 보장된다는 사실을 알고 있습니다. (만료 시간없이 어이없는 요구 사항을 지정하면 약간의 문제가 있습니다.) 그렇다면 onStopJob은 어떨까요? 부름을받을 수 있나요? 은 onStopJob이 항상 호출됩니까?

내가 백그라운드에서 수행되는 작업이 구체적으로. 하지만 작업 완료 시점을 알 수있는 방법이 있습니다 (예 : sharedPrefs). onStopJob이 호출되어 사용자에게 작업이 완료되었다는 알림을 보낼 때 의존하고 싶습니다.

참고 : onStopJob은 이미 내가 다시 시도하는 경우는 작업이 알고 그렇게되어 있는지 여부를 확인하고 이후 통지를 보내기위한 편리한 장소입니다.

p.s. 고려해야 할 것이 있다면 고려해 볼만한 것입니다. onStartJob이 true를 반환하면 onStopJob을 호출하지 않으면 내 작업이 중지되는 시점을 시스템에서 어떻게 알 수 있습니까? 시스템이 finishs 전에 강제로 작업을 중지하기로 결정 때

답변

3

document에 따르면, onStopJob가 호출됩니다. 이 API를 사용하여 필요를 충족시킬 수 없습니다.

나는 때 작업 finishs 완료 신호로 브로드 캐스트 메시지를 보내는 것이 좋습니다.

3

상황 :
(1) onStartJob() false를 반환합니다.
(2) onStartJob()이 false를 반환 한 후 시스템이 취소 요청을 수신했습니다 (예 : onStartJob()가 돌아온 후 jobScheduler.cancelAll()가 호출 됨)
(3) jobFinished (params, false)를 호출합니다. 곧바로 onStartJob()이 true를 반환합니다.
(4) onStartJob()이 true를 반환하고 요구 사항이 더 이상 충족되지 않습니다. (5) onStartJob() 후에 jobScheduler.cancelAll()을 호출하면 true를 반환하고, 그렇지 않으면 false를 반환합니다. 마음에

상태 유지 : 시스템은 당신이() jobFinished를 호출 할 수있는 기회를 가졌다도 전에 이 작업의 실행을 중지해야 함을 확인하는 경우
onStopJob()가 호출된다.

설명 :
당신이 작업이 onStartJob에서 false를 반환하여 수행 한 해당 시스템을 말할 경우 (1) (2) (3) 시스템에서는 작업 onStopJob()를 호출하지 않습니다() 또는 호출 jobFinished(), 시스템이 할 필요가 없기 때문에.

(4) 시스템은 당신을 위해 onStopJob()를 호출하지만 요구 사항은 어쩌면 (샤오 미의 4C에 테스트) 1 분, 충족되지 후 시간이 오래 걸릴 것입니다.

(5) 시스템은 당신을 위해() onStopJob 호출합니다.

귀하의 질문 :
(1)how does the system know when my job stops running unless it calls onStopJob? 당신은 jobFinished()를 호출하거나 시스템이 당신의 작업을 완료 가지고 있음을 알려 onStartJob()에서 false를 반환 할 수 있습니다.

(2)Is it guaranteed to be called? 상황에 따라 다릅니다. 따라서 onStopJob()을 사용하여 작업이 완료되었는지 판단하는 것이 옳지 않습니다.