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, versetzt das System Ihre App in den Ruhemodus. Das System wird für den Speicherplatz und nicht für die Leistung optimiert und schützt Nutzerdaten. Dieses Systemverhalten ähnelt dem, was passiert, wenn der Nutzer Ihre App manuell über die Systemeinstellungen zum Beenden zwingt.
Auswirkungen des Ruhezustands
Wie in Tabelle 1 dargestellt, hängen die Auswirkungen des Ruhemodus 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 Ruhemodus |
---|---|---|
Android 12 oder höher | Android 12 oder höher installiert ist |
Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. Diese Aktion hat dieselbe Wirkung, als hätte der Nutzer eine Berechtigung in den Systemeinstellungen aufgerufen und die Zugriffsebene Ihrer App in Deny (Ablehnen) geä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 | Android 11 ausgeführt | Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. |
Android 11 | Auf dem Android-Betriebssystem ab Version 6.0 (API-Level 23) bis einschließlich Android 10 (API-Level 29) ausgeführt und von Google Play-Diensten unterstützt |
Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. Dieses Verhalten tritt im Dezember 2021 in Kraft. Weitere Informationen zum automatischen Zurücksetzen von Berechtigungen auf Milliarden weiterer Geräte |
Systemverhalten, wenn eine App den Ruhemodus verlässt
Wenn der Nutzer das nächste Mal mit Ihrer App interagiert, wird der Ruhemodus beendet und Jobs, Benachrichtigungen und Warnungen können wieder erstellt werden.
Das System übernimmt jedoch nicht Folgendes für Ihre App:
Gewähren Sie die Laufzeitberechtigungen Ihrer App noch einmal.
Der Nutzer muss diese Berechtigungen für Ihre App noch einmal gewähren.
Planen Sie alle Jobs, Benachrichtigungen und Warnungen neu, die geplant waren, bevor Ihre App in den Ruhemodus versetzt wurde.
Verwenden Sie WorkManager, um diesen Workflow einfacher zu unterstützen. Sie können auch eine Logik zum Neuplanen in den
ACTION_BOOT_COMPLETED
-Broadcastreceiver einfügen, der aufgerufen wird, wenn Ihre App den Ruhemodus verlässt und nachdem das Gerät gestartet wurde.
App-Nutzung
In den folgenden Abschnitten finden Sie Beispiele für die App-Nutzung sowie 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 Zeitspanne, bevor Ihre App in den Ruhemodus versetzt wird.
Unter Android 11 und höher gelten auch die folgenden Verhaltensweisen als Nutzerinteraktionen:
- Der Nutzer interagiert mit einem Widget.
Der Nutzer interagiert mit einer Benachrichtigung, außer er schließt die Benachrichtigung.
Für die App-Nutzung im Ruhemodus ist keine explizite Nutzerinteraktion erforderlich. Solange eine Komponente des Pakets aufgerufen wird, gilt dies weiterhin als App-Nutzung. Beispiele:
- Apps, deren Dienst- oder Inhaltsanbieter über eine andere App auf dem Gerät oder über das Betriebssystem verknüpft ist. Dazu gehören beispielsweise Eingabemethoden-Editoren (IMEs) oder Passwortmanager.
Broadcastempfänger im Paket, die eine explizite Übertragung von einem externen Paket empfangen.
Nicht als Beispiele zu verwendende Inhalte
Wenn Ihre App nur die in der folgenden Liste beschriebenen Verhaltensweisen aufweist, wird sie nach einigen Monaten in den Ruhemodus versetzt:
- Führt einen geplanten Job mit
JobScheduler
aus. - Er empfängt eine implizite Broadcast-Nachricht.
- Wecker stellen
Systemausnahmen vom Ruhezustand
Android gewährt in bestimmten Anwendungsfällen Ausnahmen vom App-Ruhezustand auf Systemebene. Wenn Ihre App in eine der folgenden Kategorien fällt, unterliegt sie nicht den Standards für die App-Nutzung und wird nicht in den Ruhemodus versetzt.
- Apps werden im Launcher nicht angezeigt
- Alle Apps, für die im Launcher keine aktive Kurzbefehlskachel vorhanden ist.
- Apps mit Android Work-Profil
- 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.
- Berechtigte Apps von Mobilfunkanbietern
- Alle Apps, die Mobilfunkanbieter vorab auf Geräten installieren und für die Erfüllung vertraglicher Servicepflichten für Nutzer als erforderlich erachten, z. B. Sprachnachrichten- oder Kundenservice-Apps.
- Installationsprogramme von Drittanbietern
- App-Shops von Drittanbietern für automatische Updates der installierten Apps bei Bedarf.
Ausnahmen für Nutzer vom Ruhemodus
Wenn Sie davon ausgehen, dass ein Hauptanwendungsfall in Ihrer App vom Ruhemodus betroffen ist, können Sie vom Nutzer eine Ausnahme vom App-Ruhemodus beantragen. Diese Ausnahme ist nützlich für Situationen, in denen Nutzer davon ausgehen, dass Ihre App hauptsächlich im Hintergrund ausgeführt wird, auch wenn sie nicht mit Ihrer App interagieren. Dies ist beispielsweise der Fall, wenn Ihre App eine der folgenden Aktionen ausführt:
- Sorgen Sie für die Sicherheit Ihrer Familie, indem Sie regelmäßig den Standort Ihrer Familienmitglieder melden.
- Daten zwischen einem Gerät und dem Server Ihrer App synchronisieren.
- Mit Smart-Home-Geräten wie einem Fernseher kommunizieren
- Koppeln Sie das Gerät mit Companion-Geräten wie einer Smartwatch.
Führen Sie die Schritte in den folgenden Abschnitten aus, um eine Ausnahme zu beantragen.
Prüfen, ob der Nutzer den Ruhemodus für Ihre App bereits deaktiviert hat
Mit der getUnusedAppRestrictionsStatus()
API können Sie prüfen, ob der Nutzer den Ruhemodus 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 Ruhemodus für Ihre App zu deaktivieren
Wenn der Nutzer den Ruhemodus für Ihre App noch nicht deaktiviert hat, können Sie ihm eine entsprechende Anfrage senden. Gehen Sie dazu so vor:
- Zeigen Sie eine Benutzeroberfläche an, in der dem Nutzer erklärt wird, warum er den Ruhemodus für Ihre App deaktivieren muss.
-
Rufen Sie die
createManageUnusedAppRestrictionsIntent()
API auf, wie im API-Codebeispiel gezeigt. Diese API erstellt einen Intent, der den Bildschirm App-Informationen in den Einstellungen lädt. Hier kann der Nutzer den Ruhemodus für Ihre App deaktivieren.Es ist wichtig, dass Sie beim Senden dieser Intent-Anfrage
startActivityForResult()
und nichtstartActivity()
aufrufen.Wie in Tabelle 2 dargestellt, hängen die Position und der Name der Option von den Eigenschaften des Geräts ab, auf dem Ihre App installiert ist:
Tabelle 2 Option, mit der der Ruhezustand für Ihre App deaktiviert wird Gerätemerkmale Seite, auf der die Option angezeigt wird Name der Option, die deaktiviert werden soll Auf dem Gerät muss Android 13 oder höher installiert sein. App-Informationen App-Aktivität bei Nichtnutzung stoppen Android 12 ausgeführt App-Informationen Berechtigungen löschen und Speicherplatz freigeben Android 11 ausgeführt App-Infos > Berechtigungen Berechtigungen entfernen, wenn die App nicht verwendet wird Auf dem Gerät wird Android 6.0 bis Android 10 ausgeführt und es werden Google Play-Dienste verwendet. Play App > Dreipunkt-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 Ruhemodus für Ihre App aktiviert ist, und wie Sie Nutzer bitten können, den Ruhemodus 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 Platform API
Das Betriebssystem enthält auch eine API zur Interaktion mit der Ruhemodusfunktion. Die API funktioniert jedoch nur auf Geräten mit Android 11 oder höher. Die API verarbeitet nicht die Funktionen für den Ruhemodus, die in ältere Android-Versionen zurückportiert wurden. Daher empfehlen wir, die API nicht zu verwenden.
Wenn Sie die API aus Kompatibilitätsgründen vorübergehend weiter verwenden müssen, finden Sie in der folgenden Liste eine Anleitung dazu:
- So prüfen Sie, ob der Ruhezustand für Ihre App deaktiviert ist:
isAutoRevokeWhitelisted()
- Wenn Sie den Nutzer zur Seite mit den Einstellungen für den Ruhemodus weiterleiten möchten, erstellen Sie einen Intent mit
ACTION_APPLICATION_DETAILS_SETTINGS
.
Ruhezustandsverhalten manuell auslösen
So testen Sie, wie sich Ihre App verhält, nachdem das System sie in den Ruhemodus versetzt hat:
(Nur Android 12 und höher) Aktivieren Sie den Ruhemodus auf Ihrem Gerät:
adb shell device_config put app_hibernation app_hibernation_enabled true
Legen Sie die Standardzeit fest, nach der das System in den Ruhemodus wechselt. So können Sie sie nach dem Test wiederherstellen:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
Verringern Sie die Wartezeit des Systems. Im folgenden Beispiel wird das System so geändert, dass Ihre App nur eine Sekunde nach dem Ende der Interaktion mit der App in den Ruhemodus versetzt wird:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 1000
Warten Sie, bis alle Bootzeit-Broadcasts auf Ihrem Testgerät abgeschlossen sind. Führen Sie dazu den folgenden Befehl aus:
adb shell am wait-for-broadcast-idle
Wenn die Übertragungen abgeschlossen sind, gibt dieser Befehl die Meldung zurück:
All broadcast queues are idle!
So rufen Sie den App-Ruhezustand manuell auf:
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 Ruhemodus ist:
- Auf dem Testgerät wird jetzt eine Benachrichtigung angezeigt, dass nicht verwendete Apps im Ruhemodus sind.
Führen Sie den folgenden 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 Ruhemodus versetzt wird:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold