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 bis zu den Folgen, die auftreten, wenn der Nutzer das Beenden Ihrer App in den Systemeinstellungen manuell erzwingt.
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 | Eigenschaften des Geräts | Hibernation-Effekte |
---|---|---|
Android 12 oder höher | Mit Android 12 oder höher |
Die Laufzeit Ihrer App Berechtigungen zurückgesetzt. Diese Aktion hat denselben Effekt, als ob die Nutzenden eine Berechtigung in den Systemeinstellungen angesehen und die Zugriffsebene Ihrer App geändert in Deny. Ihre Anwendung kann im Hintergrund keine Jobs oder Benachrichtigungen 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 in Ihrem Apps Cache 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 wurden 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 Ruhezustand verlässt
Wenn der Nutzer das nächste Mal mit Ihrer App interagiert, wird der Ruhezustand beendet und wieder Jobs, Warnungen und Benachrichtigungen erstellen.
Folgendes wird jedoch nicht für Ihre App ausgeführt:
Erteilen Sie die Laufzeitberechtigungen Ihrer App noch einmal.
Der Nutzer muss diese Berechtigungen für Ihre App noch einmal erteilen.
Alle zuvor geplanten Aufträge, Warnungen und Benachrichtigungen verschieben. Ihre App in den Ruhezustand gewechselt hat.
Um diesen Workflow einfacher zu unterstützen, verwenden Sie WorkManager 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 treten außerdem folgende Verhaltensweisen auf: 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, ist sie immer noch die App-Nutzung berücksichtigt. Hier einige Beispiele:
- Apps, bei denen ein Dienst oder Contentanbieter an eine andere App auf dem Gerät gebunden ist oder dem Betriebssystem. Beispiele: Input Method Editors (IMEs) oder Passwortmanager.
Übertragungsempfänger im Paket, die eine explizite Nachricht von einem externes Paket.
Keine Beispiele
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
- Empfängt eine implizite Übertragung.
- Stellt Wecker
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, 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, wird nur die geschäftliche Profil-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 von Mobilfunkanbietern vorab auf Geräten geladen werden und die vertragliche Verpflichtungen, z. B. Mailbox- 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 Ihrer App vom Ruhezustand betroffen ist, können Sie vom Nutzer eine Ausnahme vom Ruhezustand beantragen. Diese Ausnahme ist nützlich, wenn der Nutzer erwartet, dass Ihre App hauptsächlich in ohne dass der Nutzer mit Ihrer App interagiert, Ihre App eine der folgenden Aktionen ausführt:
- Um die Sicherheit deiner Familie zu gewährleisten, 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
- Führen Sie ein Pairing mit Begleitgeräten wie einer Uhr durch.
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
So überprüfen Sie, ob der Nutzer den Ruhezustand für Ihre App bereits deaktiviert hat:
getUnusedAppRestrictionsStatus()
verwenden
der API erstellen.
Weitere Informationen zur Verwendung dieser API in Ihrer App finden Sie in der 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. Führen Sie dazu die folgenden Schritte aus:
- Eine Benutzeroberfläche anzeigen, auf der der Nutzer erläutert wird, warum er die Funktion deaktivieren muss für Ihre App in den Ruhezustand versetzt.
-
Rufen Sie den
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 können Nutzer den Ruhezustand für Ihre App deaktivieren.Es ist wichtig, dass Sie
startActivityForResult()
anrufen, nichtstartActivity()
beim Senden dieses Intents.Wie in Tabelle 2 dargestellt, hängen der Standort und der Name der Option vom Eigenschaften des Geräts, auf dem Ihre App installiert ist:
Tabelle 2 Option zum Deaktivieren des Ruhezustands für Ihr App Eigenschaften des Geräts Seite, auf der die Option angezeigt wird Name der zu deaktivierenden Option Mit Android 13 oder höher App-Informationen App-Aktivitäten 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 Das Gerät ist mit Android 6.0 bis Android 10 (einschließlich) kompatibel und wird Powered by Google Play Dienste Play App > Menü > Play Protect > Berechtigungen für nicht verwendete Apps Berechtigungen entfernen, wenn die App nicht verwendet wird
API-Codebeispiel
Dieses Codebeispiel zeigt, 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.
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 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, die das System auf den Ruhezustand wartet. So können Sie sie nach dem Testen wiederherstellen:
threshold=$(adb shell device_config get permissions \ auto_revoke_unused_threshold_millis2)
Verkürzen Sie die Wartezeit des Systems. Im folgenden Beispiel Das System wurde so geändert, dass Ihre App nur 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 Broadcasts beim Starten auf Ihrem Testgerät abgeschlossen sind. Führen Sie dazu den folgenden Befehl aus: folgenden Befehl:
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!
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, ob sich die App im Ruhezustand befindet, indem Sie eine der folgenden Methoden verwenden:
- 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