나는이 문제로 끝내고있다. 그것을위한 좋은 해결책을 찾을 수 없습니다! 내 애플 리케이션에서 나는 타이머가 반복해서 반복되는 서비스를 가지고있다. 즉, 각 timerTask가 실행 된 후 다른 타이머가 시작됩니다 (먼저 timer 및 timerTask가 취소 된 다음 새 Timer 및 TimerTask가 할당됩니다). 이것은 하루 24 시간 일합니다! 먼저 앱을 실행하고 서비스를 시작한 다음 디스플레이를 끄고 기기를 그대로 두십시오. 하지만 문제는 내가 장치로 돌아올 때마다, 내 애플 리케이션이 몇 가지 작업을 마쳤다는 것을 알게된다. 나는 이것이 CPU가 잠자고 있기 때문이라고 생각한다.안드로이드, 디스플레이가 꺼져있을 때 CPU를 켜 놓으시겠습니까?
자세한 설명을 위해 시간 간격 목록 (초)을 {601004012080}으로 가정합니다. 서비스를 시작하고 장치를 5 분 동안 그대로 두십시오. 그 다음 나는 되돌아와, 60와 100 초에 작업이하게되는 것을 본다. 그러나 서비스는 40시에 작업에 붙어 있습니다!
각 작업에는 기껏해야 5 초가 소요되는 매우 간단한 네트워크 작업이 포함됩니다. wakelock을 시도했지만 도움이되지 않습니다. 나는 이유를 모른다!
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
startForeground(id, new Notification());
pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK,"");
wl.acquire();
doAction();
return START_STICKY;
}
private void doAction(){
if (timer != null)
timer.cancel;
if (timerTask != null)
timerTask.cancel;
timer = new Timer();
timerTask = new TimerTask() {
@Override
public void run() {
doAction();
//Do some network job!
}
};
timer.schedule(timerTask, getNewInterval());
}
을 사용하여 알람을 재설정 할 수 있습니다.이 장치는 항상 충전기에 연결 되나요? – CommonsWare
아니요! 그렇지 않습니다. – Jay
~ 40-120 초마다 네트워크 I/O를 하루 종일 계속하는 것은 Google이 Android 6.0 이상에서 이러한 앱이 실행되지 않도록 조치를 취한 이유입니다. 사용자들은 안드로이드 기기의 배터리 성능 저하에 대해 지난 몇 년 동안 지속적으로 불만을 제기 해 왔으며, 그 중 많은 부분은 개발자가 제안한 바를 수행하는 사람들에게 돌아옵니다. 사용자가 기기를 하루에 몇 번씩 충전해야하는 부담을 감당할만큼 앱을 소중하게 생각합니까? – CommonsWare