2014-11-30 3 views
4

나는 jobscheduler API를 사용하는 응용 프로그램을 만들고 있습니다. 서비스를 주기적으로 실행하고 기기를 충전하려고합니다. 이것은 코드입니다.Jobscheduler API android L

이제 이것을 실행하고 장치를 분리하면 서비스가 3 초 후에 실행됩니다. setRequiresCharging을 설정하는 효과는 없습니다.

builder.setPeriodic (3000)을 주석 처리 할 때 완벽하게 작동합니다. 내가 어디로 잘못 가고 있는지 확실하지 않습니다.

+1

어쩌면 작업 스케줄러가 당신이 그런 식으로 그런 조건들을 결합하고 있지 않습니까? AND 대신 OR와 같습니다. 아니면 그들은 그러한 구석을 잊어 버렸을 것입니다. 문서는 해당 조건의 동작에 대해 명확하지 않습니다. – zapl

+0

builder.setMinimumLatency (5000)를 builder.setOverrideDeadline (60000)과 함께 사용하면 조건 (wifi 조건으로 테스트)을 고려하여 작동하므로 어쩌면 제약 조건을 무시하도록 지시하는 setPeriodic 메소드에 특별한 것이 있습니다. –

답변

4

프레임 워크는 내부적으로 각 작업을 식별하기 위해 새로운 작업이 스케줄러에 도착할 때 새로운 JobStatus을 작성합니다. JobStatus의 첫 번째 작업 중 하나는 작업에 정기적 인 업데이트 간격이 있는지 확인하고 확인하는 것입니다. 그것은 않는 경우, ready to be executed을 고려해야 할 작업에 대한 기준의 if it has a deadline constraint.

하나, 작업이 실행하거나 다른 말로해야한다는 미래의 최신 지점을 결정하기 위해의 그 모든를 periodic update interval를 사용하여 그 제약 조건이 충족되었습니다 또는 작업 마감 기한이 만료되었습니다. 자세한 내용은 JobStatus.isReady을 참조하십시오.

JobSchedulerService에는 작업 실행시기와 중지시기를 추적하는 데 사용되는 몇 가지가 추가됩니다. 이 컨트롤러 중 하나는 TimeController입니다 :

다음 만료 작업에 대한 알람을 설정하고, 작업의 최소 지연이 충족되었는지 여부를 결정

To determine if a new alarm should be scheduled, TimeController 확인 작업이있는 경우 정기적 인 업데이트 간격을 설정하면 모든 작업이 주어진 것처럼 보이는 모든 지연 또는 최종 기한 제한 조건.

최소한 을 이해하는 데 도움이 되었기를 바랍니다. 배터리 제한에도 불구하고 작업이 계속 예약되는 이유는 무엇입니까? 그러나 현재로서는이 문제를 간단하게 해결할 수있는 솔루션이 없습니다.

+0

내 이해에서 정기적 인 경우 어떤 기준에 대해서도 검사가 수행되지 않습니까? 나는 조금 혼란 스럽다. –

+0

@Rohit_Ramkumar 그것은 나를 위해 약간 혼란 스럽지만, 근원이 나타내는 것처럼 보인다. 'JobStatus.isReady'는 제약 조건을 검사 한 다음 마감 시간 제약 조건을 검사합니다. 출처를 검토 한 후, 당신에게 그런 식으로 보이지 않습니까? – adneal

+1

물론입니다. 지금 나는 그것을 얻는다. 그러나 그들이 이것을 한 이유를 이해하지 못한다. 고맙습니다. –

관련 문제