App-Ruhezustand

Wenn Ihre App auf Android 11 (API-Level 30) oder höher ausgerichtet ist und der Nutzer mehrere Monate lang nicht mit Ihrer App interagiert, wird Ihre App vom System in den Ruhezustand versetzt. Das System optimiert nicht nur die Leistung, sondern den Speicherplatz und schützt die Nutzerdaten. Dieses Systemverhalten ähnelt dem Vorgang, wenn der Nutzer das Beenden Ihrer App manuell über die Systemeinstellungen erzwingt.

Auswirkungen des Winterschlafs

Wie in Tabelle 1 gezeigt, hängen die Auswirkungen des Ruhezustands von der SDK-Zielversion Ihrer App sowie dem Gerät ab, auf dem die App ausgeführt wird:

Tabelle 1 Auswirkungen des Ruhezustands auf Ihre App
SDK-Zielversion Eigenschaften des Geräts Auswirkungen des Winterschlafs
Android 12 oder höher Android 12 oder höher

Die Laufzeitberechtigungen Ihrer App wurden zurückgesetzt. Diese Aktion hat denselben Effekt, als ob der Nutzer eine Berechtigung in den Systemeinstellungen aufgerufen und die Zugriffsebene der App zu Ablehnen geändert hätte.

Ihre App kann keine Jobs oder Benachrichtigungen im Hintergrund ausführen.

Ihre Anwendung 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 deiner App werden zurückgesetzt.
Android 11 Unterstützt Android 6.0 (API-Level 23) bis Android 10 (API-Level 29) und wird von Google Play-Diensten unterstützt.

Die Laufzeitberechtigungen deiner App werden zurückgesetzt.

Dies gilt ab Dezember 2021. Weitere Informationen finden Sie in diesem Blogpost darüber, wie Sie das automatische Zurücksetzen von Berechtigungen für Milliarden weiterer Geräte verfügbar machen.

Systemverhalten, wenn eine App den Ruhezustand verlässt

Wenn der Nutzer das nächste Mal mit Ihrer App interagiert, wird der Ruhezustand beendet und Jobs, Warnungen und Benachrichtigungen können wieder erstellt werden.

Folgendes führt das System bei Ihrer App jedoch nicht aus:

  1. Erteile die Laufzeitberechtigungen deiner App noch einmal.

    Der Nutzer muss diese Berechtigungen für Ihre App noch einmal erteilen.

  2. Verschieben Sie alle Jobs, Benachrichtigungen und Benachrichtigungen, die geplant wurden, bevor Ihre App in den Ruhezustand versetzt wurde.

    Verwenden Sie WorkManager, um diesen Workflow einfacher zu unterstützen. Sie können auch eine Neuplanungslogik im ACTION_BOOT_COMPLETED-Broadcast-Empfänger hinzufügen, der aufgerufen wird, wenn Ihre App den Ruhezustand beendet und das Gerät gestartet wurde.

App-Nutzung

Die folgenden Abschnitte enthalten Beispiele für die App-Nutzung sowie Beispiele für Aktionen, die das System nicht als App-Nutzung einstuft.

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 die App in den Ruhezustand wechselt.

Unter Android 11 und höher werden die folgenden Verhaltensweisen ebenfalls als Nutzerinteraktionen betrachtet:

  • Der Nutzer interagiert mit einem Widget.
  • Der Nutzer interagiert mit einer Benachrichtigung, schließt die Benachrichtigung jedoch nicht.

Für die Nutzung der App im Ruhezustand ist keine explizite Nutzerinteraktion erforderlich. Solange eine Komponente des Pakets aufgerufen wird, gilt sie weiterhin als Anwendungsnutzung. Hier einige Beispiele:

  • Apps, deren Dienst- oder Contentanbieter an eine andere App auf dem Gerät oder auf dem Betriebssystem gebunden ist Dazu gehören z. B. Input Method Editors (IMEs) oder Passwortmanager.
  • Broadcast-Empfänger im Paket, die eine explizite Nachricht von einem externen Paket empfangen.

Keine Beispiele

Wenn Ihre App nur die in der folgenden Liste beschriebenen Verhaltensweisen zeigt, geht sie nach einigen Monaten in den Ruhezustand:

Systemausnahmen vom Ruhezustand

Android gewährt in bestimmten Anwendungsfällen für den App-Ruhezustand Ausnahmen auf Systemebene. Wenn Ihre App in eine der folgenden Kategorien fällt, ist sie von den App-Nutzungsstandards ausgenommen und befindet sich nicht im Ruhezustand.

Apps, die nicht in der Übersicht angezeigt werden
Jede App, die keine aktive Verknüpfungskachel im Launcher hat.
Apps mit Android Work-Profil
Jede App, die ein Nutzer in einem Arbeitsprofil installiert. Wenn sich dieselbe App auch in einem privaten Profil befindet, ist nur die Arbeitsprofil-App ausgenommen.
Device Policy Controller
Apps, die lokale Geräterichtlinien und Systemanwendungen auf Geräten steuern
Vom Mobilfunkanbieter privilegierte Apps
Alle Apps, die von Mobilfunkanbietern vorab auf Geräten geladen werden und für vertragliche Verpflichtungen erforderlich sind, z. B. Mailbox- oder Kundenservice-Apps.
Drittanbieter-Installations-Apps
Drittanbieter-App-Shops für automatische Updates der installierten Apps, falls erforderlich.

Nutzerausnahmen aus dem Ruhezustand

Wenn Sie davon ausgehen, dass ein wesentlicher Anwendungsfall in Ihrer App vom Ruhezustand betroffen ist, können Sie beim Nutzer eine Ausnahme vom App-Ruhezustand beantragen. Diese Ausnahme ist in Situationen nützlich, in denen der Nutzer erwartet, dass Ihre App hauptsächlich im Hintergrund ausgeführt wird, auch wenn er nicht mit Ihrer App interagiert hat, z. B. wenn eine der folgenden Aktionen ausgeführt wird:

  • Sorgen Sie für Familiensicherheit, indem Sie regelmäßig den Standort von Familienmitgliedern 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 Begleitgeräten, z. B. einer Smartwatch.
-Ruhezustand versetzt.

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 Anwendung bereits deaktiviert hat.

Weitere Informationen zur Verwendung dieser API in Ihrer Anwendung finden Sie auf dieser Seite im API-Codebeispiel.

Nutzer bitten, den Ruhezustand 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 den Nutzer senden. Führen Sie dazu die folgenden Schritte aus:

  1. Blende eine Benutzeroberfläche ein, auf der dem Nutzer erklärt wird, warum er den Ruhezustand für deine App deaktivieren muss.
  2. Rufen Sie die createManageUnusedAppRestrictionsIntent() API auf, wie im API-Codebeispiel gezeigt. Diese API erstellt einen Intent, der den Bildschirm App-Info in den Einstellungen lädt. Von hier aus kann der Nutzer den Ruhezustand für Ihre App deaktivieren.

    Es ist wichtig, dass Sie beim Senden dieses Intents startActivityForResult() und nicht startActivity() aufrufen.

    Wie in Tabelle 2 gezeigt, hängen der Standort und der Name der Option von den Eigenschaften des Geräts ab, auf dem Ihre App installiert ist:

    Tabelle 2 Option zum Deaktivieren des Ruhezustands für Ihre App
    Eigenschaften des Geräts Seite, auf der die Option angezeigt wird Name der Option, die deaktiviert werden soll
    Android 13 oder höher App-Informationen App-Aktivität bei Nichtnutzung pausieren
    Mit Android 12 App-Informationen Berechtigungen entfernen und Speicherplatz freigeben
    Mit Android 11 App-Info > Berechtigungen Berechtigungen entfernen, wenn die App nicht verwendet wird
    Unterstützt Android 6.0 bis Android 10 und wird von Google Play-Diensten unterstützt. 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 können, ob der Ruhezustand für Ihre App aktiviert ist, und wie Sie Nutzer 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

Das Betriebssystem enthält auch eine API für die Interaktion mit der Ruhezustandsfunktion. Sie funktioniert jedoch nur auf Geräten mit Android 11 oder höher. Die Ruhefunktionen, die auf frühere Android-Versionen rückportiert wurden, werden von der API nicht verarbeitet. Daher raten wir davon ab, die API zu verwenden.

Wenn Sie die API aus Kompatibilitätsgründen vorübergehend weiterhin verwenden müssen, finden Sie hier eine entsprechende Anleitung:

Ruhezustand manuell aufrufen

Führen Sie die folgenden Schritte aus, um zu testen, wie sich Ihre App verhält, nachdem das System Ihre App in den Ruhezustand versetzt hat:

  1. (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
    
  2. Legen Sie fest, wie lange das System standardmäßig warten muss, bis der Ruhezustand übergeht. So können Sie sie nach dem Testen wiederherstellen:

    threshold=$(adb shell device_config get permissions \
      auto_revoke_unused_threshold_millis2)
    
  3. Reduzieren Sie die Wartezeit des Systems. Im folgenden Beispiel wird das System so geändert, dass Ihre Anwendung nur eine Sekunde nach Beenden der Interaktion mit der Anwendung in den Ruhezustand wechselt:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  4. Warten Sie mit dem folgenden Befehl, bis alle Übertragungen während der Bootzeit auf Ihrem Testgerät abgeschlossen sind:

    adb shell am wait-for-broadcast-idle
    

    Wenn die Broadcasts beendet sind, gibt dieser Befehl die folgende Meldung zurück: All broadcast queues are idle!

  5. Rufen Sie den App-Ruhezustand 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 sich die App im Ruhezustand befindet:

    • Auf dem Testgerät wird jetzt eine Benachrichtigung angezeigt, die besagt, dass nicht verwendete Apps im Ruhezustand 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 Ruhezustand versetzt wird:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 $threshold