2017-10-03 16 views
0

JobScheduler를 사용하여 살아 있는지 여부를 확인하는 응용 프로그램이 있습니다. 지금까지이 경우에 작동해야하기 때문에 :
Android 8의 JobScheduler 문제

  • 사용자는
  • 스마트 폰이 다시 부팅 또는 배터리가 즉시 가능으로 시작한다

어쨌든 응용 프로그램을 소진 한 최근의 응용 프로그램에서 응용 프로그램을 제거.

나는 완벽하게 작동하는 JobScheduler을 사용했습니다. 하지만 sdk26에서 안드로이드는 recents에서 제거 된 경우 내 애플 리케이션을 시작하지 않습니다.

지금 해결책은 무엇입니까? JobScheduler을 설정하여 강제로 내 JobService을 시작할 수 있습니까?

답변

0

정기적 인 작업을 예약 할 때는 setPersisted(true)을 사용하십시오. 이렇게하면 재부팅 후에도 작업 일정이 유지됩니다. 참고 : RECEIVE_BOOT_COMPLETED 권한이 필요합니다. 앱을 설치 한 후에는 예약 된 작업이 재부팅 후에도 계속 유지되기 전에 한 번 열어야합니다.

JobInfo jobInfo = new JobInfo.Builder(
         JOB_ID, new ComponentName(context, MyJobService.class)) 
         .setPeriodic(30 * 60 * 1000) 
         .setPersisted(true) 
         .setRequiresBatteryNotLow(true) 
         .build(); 
+0

SDK 26에서 어떻게 작동합니까? 내가 질문을 던지는 이유는 앱이 닫히거나 (예를 들어 추락) 앱이 종료되면 작업을 시작하지 않는다는 것입니다. 그리고 그 후에 읽은대로 서비스에는 포 그라운드 앱이없는 경우 작업을 시작하지 않는 것이 Google 정책입니다. – Yura

+0

예, 몇 달 동안 SDK 26을 대상으로 Job Scheduler를 사용하고 있습니다. 내 작업이 지속되도록 설정하면 부팅 할 때 내 응용 프로그램과 함께 자동으로 예약됩니다. 내가 추락 할 때 내 앱에 대해 말할 수는 없지만, 스 와이프를 치면 서비스가 끈적 거리고 일정한 상태를 유지해야하는 콘텐츠 관찰자가 있기 때문에 다시 돌아옵니다. 내 앱도 시스템 앱이므로 다른 방식으로 작동 할 수 있습니다. 기회가 생기면 시스템 앱 영역 밖에서 좀 더 실험 해 보겠습니다. –

+0

죄송합니다. 테스트를 더 많이 수행하는 데 시간이 걸렸지 만 지금은 Oreo에서 본 문제를 보지 못했습니다. 부팅이 완료되거나 실행 프로그램 활동의 onCreate()에서 작업 서비스를 예약하면 (이번에는 Nexus 6P Nov2017 Oreo 사용자 빌드를 사용하는 비 시스템 앱으로) setPersisted (true)가 설정되며, 둘 다 : 앱이 최근 앱에서 스 와이프되면서 재부팅됩니다. 내 직업은 최소 15 분 간격입니다. 또한 정의 된 제한을 충족하는지 확인하십시오. JobService에서 당신은 무엇을하고 있습니까? –