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, 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 und dem Gerät ab, auf dem Ihre App ausgeführt wird:

Tabelle 1. Auswirkungen des Ruhezustands auf Ihre App
SDK-Zielversion Geräteeigenschaften 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 nicht die folgenden Aktionen für Ihre App aus:

  1. Die Laufzeitberechtigungen Ihrer App noch einmal gewähren.

    Diese Berechtigungen muss der Nutzer noch einmal für Ihre App erteilen.

  2. 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 das System nicht als App-Nutzung betrachtet.

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, bis Ihre App in den Ruhezustand wechselt.

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 durch eine andere App auf dem Gerät oder das Betriebssystem gebunden ist. Dazu gehören beispielsweise Eingabemethoden-Editoren (IMEs) oder Passwortmanager.
  • Übertragungsempfänger im Paket, die eine explizite Nachricht an alle von einem externen Paket empfangen.

Keine Beispiele

Wenn Ihre App nur das in der folgenden Liste beschriebene Verhalten zeigt, wird sie nach einigen Monaten in den Ruhezustand versetzt:

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 dieselbe App auch in einem persönlichen Profil vorhanden ist, ist nur die Arbeitsprofil-App ausgenommen.
Device Policy Controller
Apps, die lokale Geräterichtlinien und Systemanwendungen auf Geräten steuern.
Privilegierte Apps von Mobilfunkanbietern
Apps, die von Mobilfunkanbietern auf Geräten vorinstalliert werden und die für vertragliche Serviceverpflichtungen erforderlich sind, z. B. Voicemail- oder Kundenservice-Apps.
Installationsprogramm-Apps von Drittanbietern
App-Shops von Drittanbietern für automatische Updates der installierten Apps, wenn nötig.

Nutzerausnahmen für den Ruhezustand

Wenn Sie davon ausgehen, dass ein wichtiger Anwendungsfall in Ihrer App durch den Ruhezustand beeinträchtigt wird, können Sie vom Nutzer eine Ausnahme vom Ruhezustand der App anfordern. Diese Ausnahme ist nützlich für Situationen, in denen der Nutzer erwartet, dass Ihre App hauptsächlich im Hintergrund funktioniert, auch wenn er nicht mit ihr interagiert, z. B. wenn Ihre App Folgendes tut:

  • Für die Sicherheit der Familie sorgen, indem der Standort von Familienmitgliedern regelmäßig gemeldet wird.
  • 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 auf dieser Seite im API-Codebeispiel.

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 ihn senden. Führen Sie dazu die folgenden Schritte aus:

  1. Zeigen Sie eine Benutzeroberfläche an, auf der dem Nutzer erklärt wird, warum er den Ruhezustand für Ihre App deaktivieren muss.
  2. 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 Sie beim Senden dieses Intents startActivityForResult() und nicht startActivity() aufrufen.

    Wie in Tabelle 2 zu sehen ist, hängen der Speicherort und der Name der Option von den Merkmalen des Geräts ab, auf dem Ihre App installiert ist:

    Tabelle 2. Option zum Deaktivieren des Ruhezustands für Ihre App
    Geräteeigenschaften 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:

Ruhezustandsverhalten manuell aufrufen

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

  1. Nur Android 12 und höher: Aktivieren Sie das Verhalten im Ruhezustand auf Ihrem Gerät:

    adb shell device_config put app_hibernation app_hibernation_enabled true
    
  2. 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)
    
  3. Verkürzen Sie die Wartezeit des Systems. Im folgenden Beispiel wird das System so geändert, dass Ihre App nur eine Sekunde nach dem Beenden der Interaktion mit der App in den Ruhezustand wechselt:

    adb shell device_config put permissions \
      auto_revoke_unused_threshold_millis2 1000
    
  4. Warten Sie, bis alle Boot-Time-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 folgende Meldung zurück: All broadcast queues are idle!

  5. So 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 die App in den Ruhezustand versetzt wurde:

    • Auf dem Testgerät wird jetzt eine Benachrichtigung angezeigt, die darauf hinweist, dass inaktive Apps in den Ruhezustand versetzt wurden.
    • Führen Sie den folgenden Befehl aus:

      adb shell cmd app_hibernation get-state PACKAGE-NAME
      
  7. So 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