Wenn Ihre App auf Android 11 (API-Level 30) oder höher ausgerichtet ist, mit Ihrer App interagieren, platziert das System Ihre die App sich im Ruhezustand befindet. Das System nimmt weniger Speicherplatz auf und das System schützt die Nutzerdaten. Dieses Systemverhalten ähnelt dem, was passiert, wenn der Nutzer Ihre App manuell über die Systemeinstellungen zum Beenden zwingt.
Auswirkungen des Winterschlafs
Wie in Tabelle 1 dargestellt, hängen die Auswirkungen des Ruhezustands vom Ziel-SDK Ihrer App ab Version sowie das Gerät, auf dem Ihre App ausgeführt wird:
SDK-Zielversion | Gerätemerkmale | Hibernation-Effekte |
---|---|---|
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 auf Deny (Ablehnen) geändert. Ihre App kann keine Jobs oder Benachrichtigungen im Hintergrund ausführen. Deine App kann keine Push-Benachrichtigungen empfangen, auch keine Push-Benachrichtigungen mit hoher Priorität Nachrichten gesendet, die über Firebase Cloud Nachrichten: Alle Dateien im Cache der App werden entfernt. |
Android 11 | Mit Android 11 | Die Laufzeitberechtigungen Ihrer App wurden zurückgesetzt. |
Android 11 | Android 6.0 (API-Level 23) bis Android 10 (API-Level 29) ist kompatibel. und wird von Google Play-Dienste |
Die Laufzeitberechtigungen Ihrer App werden zurückgesetzt. Dieses Verhalten tritt im Dezember 2021 in Kraft. Weitere Informationen in diesem Blog Beitrag über herstellung automatisches Zurücksetzen von Berechtigungen für Milliarden weitere Geräte verfügbar. |
Systemverhalten, wenn eine App den Ruhemodus verlässt
Wenn der Nutzer das nächste Mal mit Ihrer App interagiert, beendet die App den Ruhezustand und wieder Jobs, Warnungen und Benachrichtigungen erstellen.
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 die Neuplanungslogik in der
ACTION_BOOT_COMPLETED
Übertragungsempfänger, der aufgerufen wird, wenn Ihre App den Ruhezustand beendet und nachdem das Gerät gestartet wurde.
App-Nutzung
Die folgenden Abschnitte enthalten Beispiele für die App-Nutzung sowie Aktionen, die vom System nicht als App-Nutzung betrachtet werden.
Beispiele für die App-Nutzung
Wenn eine Aktivität in Ihrer App wieder aktiviert wird, wird dieses Ereignis vom System als Nutzerinteraktion eingestuft. Dementsprechend wird verlängert das System die Zeitspanne, bevor Ihre App 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, aber er schließt die Benachrichtigung senden.
Es ist zu beachten, dass die App-Nutzung im Ruhezustand nicht explizit erfordert, der Nutzerinteraktion. Solange eine Komponente des Pakets aufgerufen wird, gilt dies weiterhin als App-Nutzung. Hier einige 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 immer nur die in der folgenden Liste beschriebenen Verhaltensweisen aufweist, Ihre App nach einigen Monaten in den Ruhezustand wechselt:
- Führt einen geplanten Job mit
JobScheduler
aus. - Erhält 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, ist sie ausgenommen von den App-Nutzungsstandards erfüllt und nicht in den Ruhezustand versetzt wird.
- Apps, die nicht in der Übersicht angezeigt werden
- Alle Apps, die im Launcher keine aktive Verknüpfungskachel haben.
- 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 App im Arbeitsprofil 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
- App-Shops von Drittanbietern für automatische Updates der installierten Apps Apps, wenn nötig.
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. Das ist beispielsweise der Fall, wenn Ihre App eine der folgenden Aktionen ausführt:
- Um für die Sicherheit deiner Familie zu sorgen, musst du regelmäßig den Standort deiner Familie melden Mitglieder.
- Synchronisieren Sie Daten zwischen einem Gerät und dem Server Ihrer App.
- 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 Ruhezustand für Ihre App zu deaktivieren
Wenn der Nutzer den Ruhezustand für Ihre App noch nicht deaktiviert hat, können Sie eine an den Nutzer gesendet. 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()
auf. wie im API-Codebeispiel dargestellt. 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
startActivityForResult()
anrufen, nichtstartActivity()
beim Senden dieses Intents.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 zum Deaktivieren des Ruhezustands für Ihr App Gerätemerkmale Seite, auf der die Option angezeigt wird Name der Option, die deaktiviert werden soll Mit Android 13 oder höher App-Informationen App-Aktivität bei Nichtnutzung stoppen Mit Android 12 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 können, ob der Ruhezustand für Ihre und wie Sie Nutzer bitten, den Ruhezustand für Ihre App zu deaktivieren.
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 umfasst auch eine API für die Interaktion mit dem Ruhezustand. . Die API funktioniert jedoch nur auf Geräten mit Android 11 oder höher. Die API verarbeitet nicht die Ruhezustandsfunktionen, die zu einem früheren Zeitpunkt zurückportiert wurden. Android-Versionen Daher raten wir von der Verwendung der API ab.
Wenn Sie die API aus Kompatibilitätsgründen vorübergehend weiter verwenden müssen, Die folgende Liste zeigt, wie sie verwendet wird:
- 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 Ruhezustand weiterleiten möchten, erstellen Sie mit
ACTION_APPLICATION_DETAILS_SETTINGS
einen Intent
Ruhezustand manuell aufrufen
Um zu testen, wie sich Ihre App verhält, nachdem das System Ihre App in den Ruhezustand versetzt hat führen Sie die folgenden Schritte aus:
(Nur Android 12 und höher) Aktivieren Sie den Ruhezustand auf Ihren 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 Das System wurde so verändert, dass Ihre App nur für eine Sekunde in den Ruhezustand wechselt. nachdem Sie die Interaktion mit der App beendet haben:
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!
Rufen Sie den Ruhezustand der Anwendung 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:
- Beachten Sie, dass das Testgerät jetzt eine Benachrichtigung anzeigt, die darauf hinweist, nicht verwendete Apps in den Ruhezustand versetzt werden.
Führen Sie den folgenden Befehl aus:
adb shell cmd app_hibernation get-state
PACKAGE-NAME
Standardmäßige Wartezeit des Systems wiederherstellen in den Ruhezustand versetzen:
adb shell device_config put permissions \ auto_revoke_unused_threshold_millis2 $threshold