2

내 Android 애플리케이션은 사용자가 특정 시간에 알림을 보내 일일 계획을 따르도록 도와줍니다. 이 작업은 JobScheduler로 쉽게 해결할 수 있습니다. 쉽고 가볍고 최신 솔루션 인 것처럼 보입니다.Android에서 하루에 한 번 예약 된 작업을 실행합니다.

내가 고심하고있는 것은 매일 모든 알림을 계획하는 것입니다. 사용자 매일 계획을 확인하고 매일 자정에 자동으로 알림을 예약하는 코드를 실행해야합니다. 그리고 지금까지 나는 2 가지 접근법을 발견했습니다.

JobService를 사용하십시오.는 그것은

공공 최종 무효 jobFinished (JobParameters의 PARAMS, 부울 needsReschedule)

으로 다시 스케줄 그러나 나는

  1. 내가해야하기 때문에 나쁜 해결책이라고 생각 될 수있다 성공 했음에도 불구하고 완성 된 작업을 실패로 간주합니다.

  2. 일정 시간이 선형 적으로 증가합니다/exponenti 동맹국이고 저에게 받아 들일 수 없습니다.

또 다른 방법은 알람 관리기 사용하는 것입니다, 그러나 그것은 또한 장치 잠

등록 경보가 유지됩니다

입니다 동안 문서에 따르면 단점

  1. 의 몇 가지를 가지고 (그리고 그 시간 동안 장치가 꺼지면 장치를 깨울 수도 있습니다), 장치를 끄고 재부팅하면 장치가 지워집니다.

내 사용자가 중요한 것을 놓칠 수 있으므로 허용되지 않습니다.

  1. 나는 배터리를 꽤 빨리 없앤다는 것을 읽었습니다. 그게 사실이야?

설명서에 나와있는 다른 해결책은 내가 필요로하지 않는 것 같습니다. (https://developer.android.com/topic/performance/scheduling.html)

가볍고 반복적 인 재부팅이 매일 예정된 작업을 어떻게 실행합니까?

답변

0

JobService를 사용하는 것이 좋습니다. 직업을 다시 예약 할 필요가 없습니다. 필요에 따라 새로운 일자리를 만드십시오.

+0

좋은 아이디어. 하지만 아래 코멘트에 따르면 JobScheduler 실행을 연기 할 수 있기 때문에 Doze 모드도 고려해야합니다. 그래서 내가 이해할 수있는 한, JobScheduler와 AlarmManger로이 기능을 구현할 수 있으며 배터리 소모량과 일정 시간 정밀도 사이의 절충 만이 가능합니다. 적어도 몇 가지 선택을하는 것이 좋습니다. 고맙습니다! – StackNRG

0

알람을 예약하는 것과 관련하여 나만의 문제가 있습니다. 상황을 악화 시키려면 Android 6부터 시작하여 Doze 모드로 설정하여 알람 실행을 지연시킵니다.

하여 살펴 보시기 바랍니다 : 알람 용 https://developer.android.com/training/monitoring-device-state/doze-standby.html

을, 당신은 부팅이 완료 청취자를 가지고 다시 시작에 알람을 다시 예약 할 수 있습니다. 알람 발생시 네트워크 연결이 필요하지 않은 경우 위의 링크에서 Doze에 앱을 적용하십시오.

+0

AlarmManger가 setAndAllowWhileIdle() 메소드로 내 요구 사항을 충족시킬 수있는 것처럼 보입니다. 내가 지금 가지고있는 유일한 관심사는 배터리 소모입니다. 설명서에서 "이러한 경보는 유휴 상태 일 때 장치의 전원 사용에 상당한 영향을 미칠 수 있으므로 (따라서 일정을 잡아 앱을 예약하는 데 큰 위험을 초래할 수 있음)주의를 기울여 사용해야합니다." 그래서 대부분의 경우 배터리 수명과 관련하여 AlarmManger가 얼마나 비싼지를 알아 내기위한 실험/연구. 나는 안드로이드를 처음 사용하므로 Doze 모드 섹션을 놓쳤다. 이것을 지적 해 주셔서 감사합니다! – StackNRG

+0

필자가 경험 한 바에 따르면,'setExactAndAllowWhileIdle '은 필요한 시간에 발사되는 것처럼 보일뿐입니다. 단 한 가지 단점은 알람 발령 중에 네트워크 연결이없는 것으로 보인다는 것입니다. 그래서 그것을 지역 물건으로 사용하면 효과가 있습니다. 내가 이해 한대로 Doze 모드에서 알람 및 작업이 다음 유지 관리 기간으로 연기되므로 작업 스케줄러를 사용하는 것이 도움이되지 않는 것 같습니다. JobScheduler는 안드로이드 21+에서 구할 수 있으며 이전 버전에는 Firebase JobDispacther가 있지만 현재는 androdid 5에서만 GooglePlayDriver 만 사용하는 것 같습니다. – Alin

관련 문제