Wie genau funktioniert die Methode "setRequireDeviceIdle" von JobInfo.Builder? Von dem, was ich in der Android-Dokumentation (https://developer.android.com/reference/android/app/job/JobInfo.Builder.html#setRequiresDeviceIdle(boolean)) angegeben habe, sollte es garantieren, dass Ihre Jobs nur gestartet werden, wenn keine Interaktion mit dem Gerät stattgefunden hat.Android JobScheduler setRequiresDeviceIdle
Meine Erfahrung ist es anders:
private void scheduleRestartJob(){
ComponentName mServiceComponent = new ComponentName(this, RelaunchAppJobService.class);
JobInfo.Builder builder = new JobInfo.Builder(1002, mServiceComponent);
builder.setRequiresDeviceIdle(true);
builder.setPersisted(true);
builder.setOverrideDeadline(10000);
mJobScheduler.schedule(builder.build());
}
Wenn ich meine Anwendung zu beenden, und starten Sie ein anderes zu verwenden, spielt es keine Rolle, ob ich aktiv bin oder nicht, da der Job immer nach dem Lauf wird 10 Sekunden.
Nun, das ist sinnvoll, aber vor der Verwendung von "setOverrideDeadline" habe ich "setPeriodic" mit den gleichen 10 Sekunden verwendet. Das Verhalten war jedoch das gleiche (obwohl sich die Dokumentation nicht darauf bezieht, dass es die anderen Anforderungen ignoriert). Was ich hier erreichen möchte, ist es, meine App neu zu starten, wenn der Benutzer für eine bestimmte Zeit untätig war. – flame
Der Grund, warum Sie dieses Verhalten unter Verwendung von 'setPeriodic' ohne' setOverrideDeadline' gesehen haben, ist, dass 'setPeriodic' trotz der Aussage der Dokumentation implizit eine Überschreibungsfrist setzt und alle anderen Anforderungen ignoriert. Es scheint, dass Sie diesen Fehler umgehen können, indem Sie eine 'if (! JobParameters.isOverrideDeadlineExpired())' Prüfung in Ihre 'onStartJob' Methode setzen. – HexAndBugs