Wenn Ihre App auf Android 11 (API‑Level 30) oder höher ausgerichtet ist und der Nutzer einige Monate lang nicht mit Ihrer App interagiert, wird Ihre App vom System automatisch in den Ruhezustandgesetzt. Das System ist auf Speicherplatz anstelle von Leistung ausgelegt und das System schützt Nutzerdaten. Das Systemverhalten ähnelt dem, was passiert, wenn der Nutzer Ihre App manuell über die Systemeinstellungen beendet.
Auswirkungen des Ruhezustands
Wie in Tabelle 1 dargestellt, hängen die Auswirkungen des Ruhezustands von der Ziel-SDK-Version Ihrer App sowie vom Gerät ab, auf dem Ihre App ausgeführt wird:
| SDK-Zielversion | Gerätemerkmale | Auswirkungen des Ruhezustands |
|---|---|---|
| Android 12 oder höher | Gerät mit Android 12 oder höher |
Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. Diese Aktion hat dieselbe Wirkung, wie wenn der Nutzer eine Berechtigung in den Systemeinstellungen aufruft und die Zugriffsebene Ihrer App in Verweigern ändert. Ihre App kann keine Jobs oder Benachrichtigungen im Hintergrund ausführen. Ihre App kann keine Push-Benachrichtigungen empfangen, einschließlich Nachrichten mit hoher Priorität, die über Firebase Cloud Messaging gesendet werden. Alle Dateien im Cache der App werden entfernt. |
| Android 11 | Gerät mit Android 11 | Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. |
| Android 11 | Gerät mit Android 6.0 (API‑Level 23) bis Android 10 (API‑Level 29), das Google Play-Dienste nutzt. |
Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. Dieses Verhalten tritt im Dezember 2021 in Kraft. Weitere Informationen zur Funktion „automatisches Zurücksetzen von Berechtigungen“ finden Sie in diesem Blogpost. |
Systemverhalten, wenn eine App den Ruhezustand verlässt
Wenn der Nutzer das nächste Mal mit Ihrer App interagiert, wird der Ruhezustand beendet und die App kann wieder Jobs und Benachrichtigungen erstellen.
Das System führt jedoch Folgendes nicht für Ihre App aus:
Die Laufzeitberechtigungen Ihrer App noch einmal gewähren.
Diese Berechtigungen muss der Nutzer noch einmal für Ihre App erteilen.
Jobs und Benachrichtigungen neu planen, die vor dem Ruhezustand Ihrer App geplant waren.
Um diesen Workflow zu vereinfachen, verwenden Sie WorkManager. Sie können auch im
ACTION_BOOT_COMPLETED-Übertragungsempfänger eine Logik für die erneute Planung hinzufügen. Er wird aufgerufen, wenn Ihre App den Ruhezustand verlässt und nachdem das Gerät hochgefahren ist.
App-Nutzung
In den folgenden Abschnitten finden Sie Beispiele für die App-Nutzung sowie Beispiele für Aktionen, die vom System nicht als App-Nutzung betrachtet werden.
Beispiele für die App-Nutzung
Wenn eine Aktivität in Ihrer App fortgesetzt wird, betrachtet das System dieses Ereignis als Nutzerinteraktion. Daher verlängert das System die Zeit, bevor deine App in den Ruhezustand versetzt wird.
Unter Android 11 und höher gilt auch folgendes Verhalten als Nutzerinteraktion:
- Der Nutzer interagiert mit einem Widget.
Der Nutzer interagiert mit einer Benachrichtigung, außer wenn er die Benachrichtigung schließt.
Bezüglich des Ruhezustands erfordert die App-Nutzung nicht explizit eine Nutzerinteraktion. Solange eine Komponente des Pakets aufgerufen wird, gilt dies als App-Nutzung. Dazu gehören unter anderem:
- Apps, die einen Dienst oder Contentanbieter haben, der an eine andere App auf dem Gerät oder das Betriebssystem gebunden ist. Beispiele hierfür sind Eingabemethoden-Editoren (IMEs) oder Passwortmanager.
Übertragungsempfänger im Paket, die eine explizite Nachricht an alle von einem externen Paket empfangen.
Beispiele für unzulässige Inhalte
Wenn Ihre App nur das in der folgenden Liste beschriebene Verhalten zeigt, wird sie nach einigen Monaten in den Ruhezustand versetzt:
- Sie führt einen geplanten Job mit
JobScheduleraus. - Sie empfängt eine implizite Nachricht an alle.
- Sie plant Alarme.
Systemseitige Ausnahmen vom Ruhezustand
Android sieht in bestimmten Anwendungsfällen systemseitige Ausnahmen vor, bei denen Apps nicht in den Ruhezustand versetzt werden. Wenn Ihre App in eine der folgenden Kategorien fällt, ist sie von den Standards für die App-Nutzung ausgenommen und wird nicht in den Ruhezustand versetzt.
- Apps, die nicht im Launcher angezeigt werden
- Alle Apps, die keine aktive Verknüpfungskachel im Launcher haben.
- Apps im Arbeitsprofil
- Alle Apps, die ein Nutzer in einem Arbeitsprofil installiert. Wenn sich dieselbe App auch in einem privaten Profil befindet, ist nur die App im Arbeitsprofil ausgenommen.
- Device Policy Controller
- Apps, die lokale Geräterichtlinien und Systemanwendungen auf Geräten steuern.
- Privilegierte Apps von Mobilfunkanbietern
- Alle Apps, die Mobilfunkanbieter auf Geräten vorinstallieren und die sie für vertragliche Dienstleistungsverpflichtungen für erforderlich halten, z. B. Voicemail- oder Kundenservice-Apps.
- Installationsprogramm-Apps von Drittanbietern
- App-Shops von Drittanbietern, um bei Bedarf automatische Updates für die installierten Apps zu erhalten.
Nutzerseitige Ausnahmen vom Ruhezustand
Wenn Sie davon ausgehen, dass ein wichtiger Anwendungsfall in Ihrer App vom Ruhezustand betroffen ist, können Sie den Nutzer bitten, die App vom Ruhezustand auszunehmen. Diese Ausnahme ist nützlich, wenn der Nutzer erwartet, dass Ihre App hauptsächlich im Hintergrund ausgeführt wird, auch wenn er nicht mit Ihrer App interagiert, z. B. wenn Ihre App Folgendes tut:
- Sicherheit für die Familie durch regelmäßige Meldung des Standorts von Familienmitgliedern.
- Daten zwischen einem Gerät und dem Server Ihrer App synchronisieren.
- Mit Smart-Home-Geräten wie einem Fernseher kommunizieren.
- Mit Companion-Geräten wie einer Smartwatch koppeln.
Führen Sie die Schritte in den folgenden Abschnitten aus, um eine Ausnahme zu beantragen.
Prüfen, ob der Nutzer den Ruhezustand für Ihre App bereits deaktiviert hat
Mit der getUnusedAppRestrictionsStatus()-API können Sie prüfen, ob der Nutzer den Ruhezustand für Ihre App bereits deaktiviert hat.
Weitere Informationen zur Verwendung dieser API in Ihrer App finden Sie im API-Codebeispiel auf dieser Seite.
Nutzer bitten, den Ruhezustand für Ihre App zu deaktivieren
Wenn der Nutzer den Ruhezustand für Ihre App noch nicht deaktiviert hat, können Sie eine Anfrage an den Nutzer senden. Führen Sie dazu die folgenden Schritte aus:
- Zeige eine Benutzeroberfläche an, auf der dem Nutzer erklärt wird, warum er den Ruhezustand für deine App deaktivieren muss.
-
Rufen Sie die
createManageUnusedAppRestrictionsIntent()API auf, wie im API-Codebeispiel gezeigt. Mit dieser API wird ein Intent erstellt, mit dem der Bildschirm App-Info in den Einstellungen geladen wird. Hier kann der Nutzer den Ruhezustand für Ihre App deaktivieren.Es ist wichtig, dass du beim Senden dieses Intents
startActivityForResult()und nichtstartActivity()aufrufst.Wie in Tabelle 2 dargestellt, hängen der Speicherort und der Name der Option von den Eigenschaften des Geräts ab, auf dem deine App installiert ist:
Tabelle 2. Option zum Deaktivieren des Ruhezustands für Ihre App Gerätemerkmale Seite, auf der die Option angezeigt wird Name der Option, die deaktiviert werden soll Gerät mit Android 13 oder höher App-Informationen App-Aktivität bei Nichtnutzung stoppen Gerät mit Android 12 App-Informationen Berechtigungen löschen und Speicherplatz freigeben Gerät mit Android 11 App-Info > Berechtigungen Berechtigungen entfernen, wenn die App nicht verwendet wird Gerät mit Android 6.0 bis Android 10, das Google Play-Dienste nutzt Play App > Menü > Play Protect > Berechtigungen für nicht verwendete Apps Berechtigungen entfernen, wenn die App nicht verwendet wird
API-Codebeispiel
In diesem Codebeispiel wird gezeigt, wie Sie prüfen, ob der Ruhezustand für Ihre App aktiviert ist, und wie Sie Nutzer richtig auffordern, den Ruhezustand für Ihre App zu deaktivieren.
Kotlin
val future: ListenableFuture<Int> = PackageManagerCompat.getUnusedAppRestrictionsStatus(context) future.addListener({ onResult(future.get()) }, ContextCompat.getMainExecutor(context)) fun onResult(appRestrictionsStatus: Int) { when (appRestrictionsStatus) { // Couldn't fetch status. Check logs for details. ERROR -> { } // Restrictions don't apply to your app on this device. FEATURE_NOT_AVAILABLE -> { } // The user has disabled restrictions for your app. DISABLED -> { } // If the user doesn't start your app for a few months, the system will // place restrictions on it. See the API_* constants for details. API_30_BACKPORT, API_30, API_31 -> handleRestrictions(appRestrictionsStatus) } } fun handleRestrictions(appRestrictionsStatus: Int) { // If your app works primarily in the background, you can ask the user // to disable these restrictions. Check if you have already asked the // user to disable these restrictions. If not, you can show a message to // the user explaining why permission auto-reset or app hibernation should be // disabled. Then, redirect the user to the page in system settings where they // can disable the feature. val intent = IntentCompat.createManageUnusedAppRestrictionsIntent(context, packageName) // You must use startActivityForResult(), not startActivity(), even if // you don't use the result code returned in onActivityResult(). startActivityForResult(intent, REQUEST_CODE) }
Legacy-Plattform-API
Auch das Betriebssystem enthält eine API für die Interaktion mit der Funktion für den Ruhezustand. Die API funktioniert jedoch nur auf Geräten mit Android 11 oder höher. Die API verarbeitet nicht die Funktionen für den Ruhezustand, die auf frühere Android-Versionen zurückportiert wurden. Daher raten wir von der Verwendung der API ab.
Im Folgenden finden Sie Informationen für den Fall, dass Sie die API vorübergehend aus Kompatibilitätsgründen weiter verwenden müssen:
- So prüfen Sie, ob der Ruhezustand für Ihre App deaktiviert ist:
isAutoRevokeWhitelisted() - So leiten Sie den Nutzer zur Seite mit den Einstellungen für den Ruhezustand weiter: Erstellen Sie einen Intent mit
ACTION_APPLICATION_DETAILS_SETTINGS
Ruhezustand manuell aufrufen
So testen Sie, wie sich Ihre App verhält, nachdem das System sie in den Ruhezustand versetzt hat:
(Nur Android 12 und höher) Aktivieren Sie den Ruhezustand auf Ihrem Gerät:
adb shell device_config put app_hibernation app_hibernation_enabled true
Legen Sie die Standardzeit fest, die das System wartet, bevor es in den Ruhezustand wechselt. So können Sie sie nach dem Testen wiederherstellen:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
Reduzieren Sie die Wartezeit des Systems. Im folgenden Beispiel wird das System so geändert, dass Ihre App nur eine Sekunde nach Beendigung der Interaktion mit der App in den Ruhezustand versetzt wird:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 1000
Warten Sie, bis alle Boot-Zeit-Broadcasts auf Ihrem Testgerät abgeschlossen sind, indem Sie den folgenden Befehl ausführen:
adb shell am wait-for-broadcast-idle
Wenn die Übertragungen abgeschlossen sind, gibt dieser Befehl die folgende Meldung zurück:
All broadcast queues are idle!App-Ruhezustand manuell aufrufen:
adb shell cmd jobscheduler run -u 0 -f \ com.google.android.permissioncontroller 2
(Nur Android 12 und höher) Prüfen Sie mit einer der folgenden Methoden, ob die App im Ruhezustand ist:
- Auf dem Testgerät wird jetzt eine Benachrichtigung angezeigt, dass nicht verwendete Apps in den Ruhezustand versetzt wurden.
Führen Sie dazu diesen Befehl aus:
adb shell cmd app_hibernation get-state PACKAGE-NAME
Stellen Sie die Standardzeit wieder her, die das System wartet, bevor Ihre App in den Ruhezustand versetzt wird:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold