Die Plattform Android 16 enthält Verhaltensänderungen, die sich auf Ihre App auswirken können. Die folgenden Verhaltensänderungen gelten für alle Apps, die auf Android 16 ausgeführt werden, unabhängig von targetSdkVersion
. Sie sollten Ihre App testen und sie gegebenenfalls so ändern, dass sie diese Änderungen unterstützt.
Lesen Sie sich auch die Liste der Verhaltensänderungen durch, die sich nur auf Apps mit Ausrichtung auf Android 16 auswirken.
Hauptfunktion
Android 16 enthält die folgenden Änderungen, die verschiedene Kernfunktionen des Android-Systems ändern oder erweitern.
JobScheduler-Kontingentoptimierungen
Ab Android 16 passen wir das Zeitkontingent für die Ausführung regelmäßiger und beschleunigter Jobs anhand der folgenden Faktoren an:
- In welchem App-Standby-Bucket sich die Anwendung befindet: In Android 16 werden aktive Standby-Buckets durch ein großzügiges Laufzeitkontingent erzwungen.
- Wenn die Ausführung des Jobs gestartet wird, während die App im Vordergrund ist: Unter Android 16 wird das Kontingent für die Joblaufzeit eingehalten, wenn Jobs gestartet werden, während die App für den Nutzer sichtbar ist, und fortgesetzt werden, nachdem die App ausgeblendet wurde.
- Wenn der Job ausgeführt wird, während ein Dienst im Vordergrund ausgeführt wird: Unter Android 16 wird das Laufzeitkontingent für Jobs eingehalten, die gleichzeitig mit einem Dienst im Vordergrund ausgeführt werden. Wenn Sie Jobs für die vom Nutzer initiierte Datenübertragung verwenden, sollten Sie stattdessen Jobs für die vom Nutzer initiierte Datenübertragung verwenden.
Diese Änderung wirkt sich auf Aufgaben aus, die mit WorkManager, JobScheduler und DownloadManager geplant wurden. Wenn Sie herausfinden möchten, warum ein Job angehalten wurde, empfehlen wir, den Grund dafür zu protokollieren. Rufen Sie dazu WorkInfo.getStopReason()
auf (für JobScheduler-Jobs JobParameters.getStopReason()
).
Weitere Informationen zu Best Practices für eine optimale Akkunutzung finden Sie unter Akkunutzung für APIs zur Aufgabenplanung optimieren.
Wir empfehlen außerdem, die neue JobScheduler#getPendingJobReasonsHistory
API zu verwenden, die in Android 16 eingeführt wurde, um herauszufinden, warum ein Job nicht ausgeführt wurde.
Testen
Wenn Sie das Verhalten Ihrer App testen möchten, können Sie das Überschreiben bestimmter Jobkontingentoptimierungen aktivieren, solange die App auf einem Android 16-Gerät ausgeführt wird.
Wenn Sie die Erzwingung der Option „Top-Status hält sich an das Job-Laufzeitkontingent“ deaktivieren möchten, führen Sie den folgenden adb
-Befehl aus:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_TOP_STARTED_JOBS APP_PACKAGE_NAME
Wenn Sie die Erzwingung der Richtlinie „Jobs, die gleichzeitig mit einem Dienst im Vordergrund ausgeführt werden, müssen das Kontingent für die Joblaufzeit einhalten“ deaktivieren möchten, führen Sie den folgenden adb
-Befehl aus:
adb shell am compat enable OVERRIDE_QUOTA_ENFORCEMENT_TO_FGS_JOBS APP_PACKAGE_NAME
Wenn Sie bestimmtes Verhalten des App-Standby-Buckets testen möchten, können Sie den App-Standby-Bucket Ihrer App mit dem folgenden adb
-Befehl festlegen:
adb shell am set-standby-bucket APP_PACKAGE_NAME active|working_set|frequent|rare|restricted
Um den App-Standby-Bucket Ihrer App zu ermitteln, können Sie den folgenden adb
-Befehl verwenden:
adb shell am get-standby-bucket APP_PACKAGE_NAME
Einstellung von JobInfo#setImportantWhileForeground
Die Methode JobInfo.Builder#setImportantWhileForeground(boolean)
gibt an, wie wichtig ein Job ist, wenn sich die Planungs-App im Vordergrund befindet oder vorübergehend von Einschränkungen im Hintergrund ausgenommen ist.
Diese Methode ist seit Android 12 (API-Level 31) nicht mehr unterstützt. Ab Android 16 funktioniert sie nicht mehr effektiv und der Aufruf dieser Methode wird ignoriert.
Das Entfernen der Funktion gilt auch für JobInfo#isImportantWhileForeground()
. Ab Android 16 gibt die Methode bei einem Aufruf false
zurück.
Nutzerfreundlichkeit und System-UI
Android 16 enthält die folgenden Änderungen, die für eine einheitlichere, intuitivere Nutzererfahrung sorgen sollen.
Einstellung von störenden Ansagen zu Bedienungshilfen
Unter Android 16 werden Ansagen für Bedienungshilfen nicht mehr unterstützt. Sie werden durch die Verwendung von announceForAccessibility
oder das Senden von Bedienungshilfenereignissen vom Typ TYPE_ANNOUNCEMENT
gekennzeichnet. Dies kann zu inkonsistenten Nutzererfahrungen für Nutzer von TalkBack und dem Android-Screenreader führen. Alternativen können die Anforderungen einer größeren Anzahl von Nutzern in einer Vielzahl von Hilfstechnologien von Android besser erfüllen.
Beispiele für Alternativen:
- Verwenden Sie für erhebliche Änderungen an der Benutzeroberfläche, z. B. Fensteränderungen,
Activity.setTitle(CharSequence)
undsetAccessibilityPaneTitle(java.lang.CharSequence)
. Verwenden Sie in der Funktion „Schreiben“ die TasteModifier.semantics { paneTitle = "paneTitle" }
. - Verwenden Sie
setAccessibilityLiveRegion(int)
, um Nutzer über Änderungen an wichtigen UI-Elementen zu informieren. Verwenden Sie in der ZeichenansichtModifier.semantics { liveRegion = LiveRegionMode.[Polite|Assertive]}
. Sie sollten sparsam verwendet werden, da sonst jedes Mal, wenn eine Ansicht aktualisiert wird, eine Benachrichtigung generiert wird. - Wenn du Nutzer über Fehler informieren möchtest, sende eine
AccessibilityEvent
vom TypAccessibilityEvent#CONTENT_CHANGE_TYPE_ERROR
und setzeAccessibilityNodeInfo#setError(CharSequence)
oder verwendeTextView#setError(CharSequence)
.
Weitere Informationen zu den empfohlenen Alternativen finden Sie in der Referenzdokumentation zur eingestellten announceForAccessibility
API.