App-Ruhezustand

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:

Tabelle 1 Auswirkungen des Ruhezustands auf Ihre App
SDK-Zielversion Eigenschaften des Geräts 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 Anwendung werden entfernt.

Android 11 Mit Android 11 Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt.
Android 11 Android 6.0 (API-Level 23) bis Android 10 (API-Level 29) ist kompatibel und wird durch Google Play-Dienste bereitgestellt.

Die Laufzeitberechtigungen Ihrer App wurden zurückgesetzt.

Dieses Verhalten tritt im Dezember 2021 in Kraft. In diesem Blogpost erfahren Sie mehr darüber, wie Sie die automatische Zurücksetzung von Berechtigungen für Milliarden weitere Geräte aktivieren können.

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.

Folgendes wird jedoch nicht für Ihre App ausgeführt:

  1. Gewähren Sie die Laufzeitberechtigungen Ihrer App noch einmal.

    Der Nutzer muss diese Berechtigungen für Ihre App noch einmal gewähren.

  2. Verschieben Sie alle Jobs, Warnungen und Benachrichtigungen, die geplant wurden, bevor Ihre Anwendung in den Ruhezustand übergegangen ist.

    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 sich die Zeitspanne, in der Ihre Anwendung in den Ruhezustand wechselt.

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 dass die Benachrichtigung geschlossen wird.

Es ist zu beachten, dass für die Verwendung von Apps im Ruhezustand keine Nutzerinteraktion explizit erforderlich ist. Auch wenn eine Komponente des Pakets aufgerufen wird, gilt dies als Anwendungsnutzung. Hier einige Beispiele:

  • Apps, bei denen ein Dienst oder Contentanbieter an eine andere App auf dem Gerät oder Betriebssystem gebunden ist Dazu gehören beispielsweise Eingabemethoden-Editoren (IMEs) oder Passwortmanager.
  • Übertragungsempfänger im Paket, die eine explizite Übertragung von einem externen Paket empfangen.

Keine Beispiele

Wenn Ihre App immer nur die in der folgenden Liste beschriebenen Verhaltensweisen aufweist, wechselt sie nach einigen Monaten in den Ruhezustand:

Systemausnahmen vom Ruhezustand

Bei Android werden in bestimmten Anwendungsfällen Ausnahmen vom App-Ruhezustand auf Systemebene gewährt. 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
Jede App, die ein Nutzer über ein Arbeitsprofil installiert. Wenn sich dieselbe App auch in einem privaten Profil befindet, ist nur die Arbeitsprofil-App ausgenommen.
Device Policy Controller
Apps, mit denen lokale Geräterichtlinien und Systemanwendungen auf Geräten gesteuert werden
Vom Mobilfunkanbieter privilegierte Apps
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.
Drittanbieter-Apps mit Installation
Drittanbieter-App-Shops für automatische Updates der installierten Apps bei Bedarf.

Nutzerausnahmen vom Ruhezustand

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.
  • Kommunikation mit Smart-Home-Geräten wie einem Fernseher
  • 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 Ruhezustand für Ihre Anwendung noch nicht deaktiviert hat, können Sie eine Anfrage an ihn senden. Gehen Sie dazu so vor:

  1. Zeigen Sie eine Benutzeroberfläche an, in der dem Nutzer erklärt wird, warum er den Ruhemodus für Ihre App deaktivieren muss.
  2. Rufen Sie die createManageUnusedAppRestrictionsIntent() API auf, wie im API-Codebeispiel gezeigt. Diese API erstellt einen Intent, mit dem der Bildschirm App info (App-Info) in den Einstellungen geladen wird. Hier kann der Nutzer den Ruhemodus für Ihre App deaktivieren.

    Es ist wichtig, dass Sie beim Senden dieses Intents startActivityForResult() und nicht startActivity() 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
    Eigenschaften des Geräts 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-Info > 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 für die Interaktion mit der Ruhezustandsfunktion. 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 raten wir von der Verwendung der API ab.

Wenn Sie die API aus Kompatibilitätsgründen vorübergehend weiter verwenden müssen, finden Sie in der folgenden Liste eine Anleitung dazu:

Ruhezustandsverhalten manuell auslösen

So testen Sie, wie sich Ihre App verhält, nachdem das System sie in den Ruhemodus versetzt hat:

  1. (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
    
  2. Legen Sie die Standardzeit fest, nach der das System in den Ruhemodus wechselt. So können Sie sie nach dem Testen wiederherstellen:

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  3. 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
    
  4. 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 Broadcasts beendet sind, gibt dieser Befehl die folgende Nachricht zurück: All broadcast queues are idle!

  5. Rufen Sie den Ruhezustand der Anwendung manuell auf:

    adb shell cmd jobscheduler run -u 0 -f \
      com.google.android.permissioncontroller 2
    
  6. (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
      
  7. 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