Android 10 bietet tolle Funktionen für Nutzer und Entwickler. In diesem Dokument wird beschrieben, was für Entwickler verfügbar ist.
Weitere Informationen zu den APIs finden Sie im API-Diff-Bericht oder in der Android API-Referenz. Suchen Sie nach APIs, die „in API-Level 29 hinzugefügt“ wurden. Lesen Sie sich auch die Informationen zu Verhaltensänderungen unter Android 10 (für Apps, die auf API-Level 29 ausgerichtet sind und für alle Apps) sowie zu Änderungen im Hinblick auf den Datenschutz durch, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.
Erhöhte Sicherheit
Android 10 bietet eine Reihe von Sicherheitsfunktionen, die in den folgenden Abschnitten zusammengefasst werden.
Verbesserte Dialogfelder für die biometrische Authentifizierung
Android 10 bietet die folgenden Verbesserungen bei der Unterstützung der biometrischen Authentifizierung:
- Eine Prüfung der biometrischen Authentifizierungsfunktion.
- Ein Fallback-Mechanismus, mit dem sich ein Nutzer mit seiner Geräte-PIN, seinem Muster oder seinem Passwort authentifizieren kann, wenn er sich nicht mit seiner biometrischen Eingabe authentifizieren kann.
- Ein Hinweis, dass das System keine Nutzerbestätigung erfordert, nachdem sich der Nutzer mit einer impliziten biometrischen Modalität authentifiziert hat. Sie können dem System beispielsweise mitteilen, dass nach der Authentifizierung eines Nutzers mit der Gesichtserkennung keine weitere Bestätigung erforderlich sein soll.
Eingebetteten DEX-Code direkt aus dem APK ausführen
Ab Android 10 können Sie der Plattform mitteilen, eingebetteten DEX-Code direkt aus der APK-Datei Ihrer App auszuführen. Diese Option kann einen Angriff verhindern, wenn ein Angreifer es jemals geschafft hat, den lokal kompilierten Code auf dem Gerät zu manipulieren.
Weitere Informationen findest du unter Eingebetteten DEX-Code direkt aus einem APK ausführen.
TLS 1.3-Unterstützung
Android 10 unterstützt TLS 1.3. TLS 1.3 ist eine umfassende Überarbeitung des TLS-Standards, die Leistungsvorteile und eine verbesserte Sicherheit bietet. Unsere Benchmarks zeigen, dass mit TLS 1.3 sichere Verbindungen bis zu 40 % schneller hergestellt werden können als mit TLS 1.2.
Weitere Informationen zur Implementierung von TLS 1.3 finden Sie im Abschnitt zu TLS auf der Seite zu Verhaltensänderungen für alle Apps.
Öffentliche Conscrypt-API
Ab Android 10 enthält der Sicherheitsanbieter Conscrypt eine öffentliche API für TLS-Funktionen.
Die Sammlung von Klassen unter android.net.ssl
enthält statische Methoden zum Zugriff auf Funktionen, die nicht über die generischen javax.net.ssl
APIs verfügbar sind. Die Namen für diese Klassen können als Plural der entsprechenden javax.net.ssl
-Klasse abgeleitet werden. Beispielsweise können für Code, der auf Instanzen von javax.net.ssl.SSLSocket
ausgeführt wird, stattdessen Methoden von SSLSockets
verwendet werden.
Konnektivitätsfunktionen
Android 10 enthält mehrere Verbesserungen im Hinblick auf Netzwerk- und Konnektivität.
Wi-Fi Network Connection API
Mit Android 10 wird die Unterstützung für Peer-to-Peer-Verbindungen hinzugefügt. Mit dieser Funktion kann Ihre App den Nutzer auffordern, den Zugangspunkt zu ändern, mit dem das Gerät verbunden ist. Verwenden Sie dazu WifiNetworkSpecifier
, um Eigenschaften eines angeforderten Netzwerks zu beschreiben. Die Peer-to-Peer-Verbindung wird für nicht netzwerkbezogene Zwecke verwendet, z. B. für die Bootstrap-Konfiguration sekundärer Geräte wie Chromecast und Google Home-Hardware.
Weitere Informationen finden Sie unter Wi-Fi Network Request API für Peer-to-Peer-Verbindungen.
API für WLAN-Netzwerkvorschläge
Unter Android 10 können Sie Nutzer in Ihrer App auffordern, eine Verbindung zu einem WLAN-Zugangspunkt herzustellen. Sie können Vorschläge dazu machen, mit welchem Netzwerk eine Verbindung hergestellt werden soll. Die Plattform wählt letztendlich anhand der Eingaben Ihrer und anderer Apps aus, welcher Zugangspunkt akzeptiert wird.
Weitere Informationen zu dieser Funktion finden Sie unter WLAN-Empfehlungen.
Verbesserungen bei den WLAN-Modi mit hoher Leistung und niedriger Latenz
Mit Android 10 können Sie dem zugrunde liegenden Modem einen Hinweis geben, um die Latenz zu minimieren.
Android 10 erweitert die WLAN-Sperre API, um den Hochleistungsmodus und den Modus mit niedriger Latenz effektiv zu unterstützen. Der WLAN-Energiesparmodus ist für die hohe Leistung und den Modus mit niedriger Latenz deaktiviert. Je nach Modemunterstützung kann im Modus mit niedriger Latenz eine weitere Latenzoptimierung aktiviert werden.
Der Modus mit niedriger Latenz ist nur aktiviert, wenn die Anwendung, die die Sperre ergreift, im Vordergrund ausgeführt wird und das Display eingeschaltet ist. Der Modus mit geringer Latenz ist besonders hilfreich für Echtzeit-Gaming-Anwendungen auf Mobilgeräten.
Spezielle Suchanfragen im DNS-Resolver
Android 10 bietet native Unterstützung für spezielle DNS-Suchanfragen, sowohl mit Klartextabfragen als auch im DNS-over-TLS-Modus. Bisher unterstützte der DNS-Resolver der Plattform nur A- und AAAA-Einträge, mit denen nur die mit einem Namen verknüpften IP-Adressen abgerufen werden konnten. Andere Eintragstypen wurden nicht unterstützt.
Die DnsResolver
API bietet eine generische, asynchrone Auflösung, mit der Sie SRV
-, NAPTR
- und andere Datensatztypen abrufen können. Das Parsen der Antwort wird der App überlassen.
Informationen zu NDK-basierten Apps finden Sie unter android_res_nsend
.
Wi‑Fi Easy Connect
Unter Android 10 können Sie mit Easy Connect WLAN-Anmeldedaten für ein Peer-Gerät bereitstellen, als Ersatz für das eingestellte WPS.
Apps können Easy Connect in ihren Einrichtungs- und Bereitstellungsablauf einbinden, indem sie die ACTION_PROCESS_WIFI_EASY_CONNECT_URI
-Intent verwenden.
Weitere Informationen zu dieser Funktion finden Sie unter Wi‑Fi Easy Connect.
Wi‑Fi Direct-Verbindungs-API
Die API-Klassen WifiP2pConfig
und WifiP2pManager
wurden in Android 10 aktualisiert, um Funktionen für den schnellen Verbindungsaufbau zu Wi-Fi Direct anhand vordefinierter Informationen zu unterstützen. Diese Informationen werden über einen Nebenkanal wie Bluetooth oder NFC weitergegeben.
Das folgende Codebeispiel zeigt, wie Sie eine Gruppe anhand vordefinierter Informationen erstellen:
Kotlin
val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) // prefer 5G band for this group val config = WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build() // create a non-persistent group on 5GHz manager.createGroup(channel, config, null)
Java
WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); Channel channel = manager.initialize(this, getMainLooper(), null); // prefer 5G band for this group WifiP2pConfig config = new WifiP2pConfig.Builder() .setNetworkName("networkName") .setPassphrase("passphrase") .enablePersistentMode(false) .setGroupOperatingBand(WifiP2pConfig.GROUP_OWNER_BAND_5GHZ) .build(); // create a non-persistent group on 5GHz manager.createGroup(channel, config, null);
Wenn Sie einer Gruppe mit Anmeldedaten beitreten möchten, ersetzen Sie manager.createGroup()
durch Folgendes:
Kotlin
manager.connect(channel, config, null)
Java
manager.connect(channel, config, null);
Bluetooth LE-Verbindungsorientierte Kanäle (CoC)
Mit Android 10 kann Ihre App BLE-CoC-Verbindungen verwenden, um größere Datenstreams zwischen zwei BLE-Geräten zu übertragen. Diese Schnittstelle abstrahiert Bluetooth- und Verbindungsmechanismen, um die Implementierung zu vereinfachen.
Telefoniefunktionen
Android 10 enthält mehrere Verbesserungen im Zusammenhang mit der Telefonie.
Verbesserungen bei der Anrufqualität
Unter Android 10 können auf Geräten, die die Funktion unterstützen, Informationen zur Qualität laufender IMS-Anrufe (IP Multimedia Subsystem) erfasst werden, einschließlich der Qualität von und zum Netzwerk.
Anruf-Filter und Anrufer-ID
Mit Android 10 können Sie in Ihrer App Anrufe, die nicht im Adressbuch des Nutzers enthalten sind, als potenzielle Spamanrufe identifizieren und Spamanrufe im Namen des Nutzers stumm ablehnen lassen. Informationen zu diesen blockierten Anrufen werden in der Anrufliste als blockierte Anrufe protokolliert, um dem Nutzer mehr Transparenz zu bieten, wenn er verpasste Anrufe hat. Wenn Sie diese API verwenden, müssen Sie keine READ_CALL_LOG
-Berechtigungen vom Nutzer einholen, um Anruffilter und Anruferidentität bereitzustellen.
API für den Anrufweiterleitungsdienst
Unter Android 10 wird die Verarbeitung von Anrufabsichten geändert. Die NEW_OUTGOING_CALL
-Broadcasts werden eingestellt und durch die CallRedirectionService
API ersetzt. Die CallRedirectionService
API bietet Schnittstellen, mit denen Sie ausgehende Anrufe der Android-Plattform ändern können. So können Drittanbieter-Apps beispielsweise Anrufe abbrechen und über VoIP weiterleiten.
Verbesserungen beim Erstellen von Dateien auf externen Speichern
Neben dem begrenzten Speicher bietet Android 10 die folgenden Funktionen für den externen Speicher:
- Mit dem Flag
IS_PENDING
können Sie Ihrer App exklusiven Zugriff auf eine Mediendatei gewähren, während sie auf die Festplatte geschrieben wird. - Wenn Sie einen bestimmten Speicherort für Dateien kennen, können Sie dem System einen Hinweis geben, wo die neu geschriebenen Dateien gespeichert werden sollen.
- Jedes externe Speichergerät hat einen eindeutigen Volumenamen.
Medien und Grafiken
Android 10 bietet die folgenden neuen Medien- und Grafikfunktionen und ‑APIs:
Audioeingabe teilen
Mit Android 10 können zwei Apps die Audioeingabe gleichzeitig teilen. Weitere Informationen finden Sie unter Audioeingabe freigeben.
Audiowiedergabe erfassen
Mit Android 10 kann eine App die Audiowiedergabe anderer Apps aufzeichnen. Weitere Informationen finden Sie unter Wiedergabeaufzeichnung.
Suchleiste in MediaStyle-Benachrichtigungen
Ab Android 10 wird in MediaStyle
-Benachrichtigungen eine Suchleiste angezeigt. Die Wiedergabeleiste zeigt den Wiedergabefortschritt ab PlaybackState.getPosition()
an. In einigen Fällen kann mit der Wiedergabeleiste zu einer bestimmten Stelle im wiedergegebenen Programm gesprungen werden. Die Darstellung und das Verhalten der Suchleiste werden durch folgende Regeln gesteuert:
- Die Schiebeleiste wird angezeigt, wenn
MediaSession
aktiv ist und seine Dauer (durchMediaMetadata.METADATA_KEY_DURATION
angegeben) größer als null ist. Bei nicht bestimmbaren Streams wie Livestreams und Radiosendungen wird der Balken also nicht angezeigt. - Wenn die Sitzung
ACTION_SEEK_TO
implementiert, kann der Nutzer die Wiedergabeposition mit der Bildlaufleiste steuern.
Native MIDI API
Die Android Native MIDI API (AMidi) bietet Anwendungsentwicklern die Möglichkeit, MIDI-Daten mit C/C++ Code zu senden und zu empfangen. Dies ermöglicht eine engere Integration in die C/C++ Audio-/Steuerungslogik und minimiert den Bedarf an JNI.
Weitere Informationen finden Sie unter Android Native MIDI API.
Verbesserungen bei MediaCodecInfo
In Android 10 wurden Methoden zu MediaCodecInfo
hinzugefügt, die weitere Informationen zu einem Codec liefern.
Weitere Informationen finden Sie unter Medienkods.
Thermal API
Wenn Geräte zu heiß werden, wird die CPU und/oder GPU möglicherweise gedrosselt. Dies kann sich auf unerwartete Weise auf Apps und Spiele auswirken. Bei Apps mit komplexen Grafiken, hoher Rechenleistung oder anhaltender Netzwerkaktivität treten häufiger Probleme auf. Diese können je nach Chipsatz- und Kernfrequenz, Integrationsebene sowie Geräteverpackung und Formfaktor variieren.
Unter Android 10 können Apps und Spiele eine thermische API verwenden, um Änderungen am Gerät zu überwachen und Maßnahmen zu ergreifen, um den Energieverbrauch zu senken und die normale Temperatur wiederherzustellen. Apps registrieren einen Listener in PowerManager, über den das System den aktuellen Überhitzungszustand von leicht und mittel bis schwer, kritisch, Notfall oder Herunterfahren meldet.
Wenn das Gerät eine Überhitzung meldet, können Apps und Spiele helfen, indem sie laufende Aktivitäten beenden, um den Energieverbrauch auf verschiedene Weise zu senken. So können Streaming-Apps beispielsweise die Auflösung, die Bitrate oder den Netzwerkverkehr reduzieren, eine Kamera-App den Blitz oder die intensive Bildverbesserung deaktivieren, ein Spiel die Framerate oder die Polygontessellierung verringern, eine Medien-App die Lautsprecherlautstärke reduzieren und eine Karten-App das GPS deaktivieren.
Für die Thermal API ist eine neue HAL-Ebene für das Gerät erforderlich. Sie wird derzeit auf Pixel-Geräten mit Android 10 unterstützt. Wir arbeiten mit unseren Geräteherstellern zusammen, um das System so schnell wie möglich umfassend unterstützen zu können.
Kamera und Bilder
Android 10 bietet die folgenden neuen kamera- und bildbezogenen Funktionen:
Unterstützung für Monochromkamera
Mit Android 9 (API-Ebene 28) wurden Schwarz-Weiß-Kameras eingeführt. In Android 10 wurde die Unterstützung für Monochromkameras weiter optimiert:
- Unterstützung für das Y8-Streamformat zur Verbesserung der Arbeitsspeichereffizienz.
- Unterstützung für die Aufnahme von monochromen DNG-Raw-Dateien.
- Einführung von MONO- und NIR-CFA-Aufzählungen, um zwischen normalen Monochromkameras und Nahinfrarotkameras zu unterscheiden.
Mit dieser Funktion können Sie ein natives Schwarz-Weiß-Bild aufnehmen. Ein logisches Gerät mit mehreren Kameras kann eine monochrome Kamera als physische Unterkamera verwenden, um auch bei wenig Licht eine bessere Bildqualität zu erzielen.
Dynamisches Tiefenformat
Ab Android 10 können Kameras die Tiefendaten für ein Bild mithilfe eines neuen Schemas namens Dynamic Depth Format (DDF) in einer separaten Datei speichern. Apps können sowohl das JPG-Bild als auch die Tiefenmetadaten anfordern und diese Informationen verwenden, um in der Nachbearbeitung beliebige Unschärfen anzuwenden, ohne die ursprünglichen Bilddaten zu ändern.
Die Spezifikation für dieses Format finden Sie unter Dynamic Depth Format.
High Efficiency Image File Format
Das HEIF-Format (High Efficiency Image File) ist ein Standard-Bild- und Videoformat, das im Vergleich zu anderen Dateiformaten eine Codierung höherer Qualität und eine geringere Dateigröße bietet.
Weitere Informationen zum Dateiformat finden Sie unter HEIC.
Verbesserungen bei der Multi-Kamera-Funktion
In Android 10 wurde die Fusion mehrerer Kameras zu einer einzigen logischen Kamera verbessert. Diese Funktion wurde in Android 9 (API-Level 28) eingeführt. Der Camera2 API wurden folgende Funktionen hinzugefügt:
isSessionConfigurationSupported(SessionConfiguration sessionConfig)
: Damit kannst du prüfen, ob die übergebene Sitzungskonfiguration verwendet werden kann, um eine Kameraaufnahmesitzung zu erstellen.Mit
LOGICAL_MULTI_CAMERA_ACTIVE_PHYSICAL_ID
können Sie die ID der aktiven physischen Kamera ermitteln, die ein logisches Kameragerät unterstützt. Sie können die zurückgegebenen IDs verwenden, um logische Streams und physische Streams von Unterkameras anzufordern, um die Energieeffizienz zu verbessern.
Accessibility Services API
In Android 10 werden die folgenden neuen Funktionen und APIs für Dienste zur Barrierefreiheit eingeführt:
Flag für den Zugangsschlüssel von AccessibilityNodeInfo
Ab Android 10 können Sie isTextEntryKey()
aufrufen, um zu ermitteln, ob eine bestimmte AccessibilityNodeInfo
eine Taste zur Texteingabe ist, die zu einer Tastatur oder einem Zahlenblock gehört.
Gesprochenes Feedback im Dialogfeld „Barrierefreiheit“
Wenn Nutzer die Bedienungshilfen-Verknüpfung verwenden müssen, um einen Bedienungshilfendienst zu starten, kann unter Android 10 der Dialog auf Wunsch des Dienstes von einer Sprachausgabe begleitet werden.
Bedienungshilfe-Tastenkombination bei aktivierter Touch-Navigation
Wenn die Funktion Bedienung per Geste in Android 10 aktiviert ist, ist die Schaltfläche für die Barrierefreiheit nicht sichtbar oder auswählbar. Um auf das Menü für Bedienungshilfen zuzugreifen, müssen Nutzer eine der folgenden Touch-Gesten ausführen:
- Wischen Sie mit zwei Fingern nach oben.
- Mit zwei Fingern nach oben wischen und halten.
Bedienungshilfen-Kurzbefehl für physische Tastaturen
Unter Android 10 können Nutzer die Tastenkombination Strg + Alt + Z auf einer physischen Tastatur drücken, um die Bedienungshilfen aufzurufen.
Verbesserung der Bildschirmtastatur
Unter Android 10 können Dienste zur Barrierefreiheit anfordern, dass die Bildschirmtastatur angezeigt wird, auch wenn das Gerät eine angeschlossene physische Tastatur erkennt. Nutzer können dieses Verhalten überschreiben.
Benutzerdefinierte Zeitlimits für Bedienungshilfen
Mit Android 10 wird die getRecommendedTimeoutMillis()
API eingeführt. Diese Methode unterstützt benutzerdefinierte Zeitlimits für interaktive und nicht interaktive UI-Elemente. Der Rückgabewert wird sowohl von den Nutzereinstellungen als auch von APIs für Barrierefreiheitsdienste beeinflusst.
Verbesserungen bei Autofill
Android 10 enthält die folgenden Verbesserungen am Autofill-Dienst.
Kompatibilitätsbezogene Autofill-Anfragen
Mit dem Flag FillRequest.FLAG_COMPATIBILITY_MODE_REQUEST
können Sie feststellen, ob eine Autofill-Anfrage über den Kompatibilitätsmodus generiert wurde.
Nutzernamen und Passwort gleichzeitig speichern
Sie können Fälle unterstützen, in denen eine Anwendung mehrere Aktivitäten verwendet, um Nutzername, Passwort und andere Felder anzuzeigen. Verwenden Sie dazu das Flag SaveInfo.FLAG_DELAY_SAVE
.
Nutzerinteraktion mit der Speicher-Benutzeroberfläche
Sie können ein Passwortfeld in einem Speicherdialogfeld ein- und ausblenden, indem Sie einen Aktions-Listener für das Dialogfeld festlegen und die Sichtbarkeit der entsprechenden Remote-Ansicht für das Passwort ändern.
Unterstützung für die Aktualisierung von Datasets
Autofill kann vorhandene Passwörter aktualisieren. Wenn ein Nutzer beispielsweise bereits ein Passwort gespeichert hat und ein neues Passwort speichert, wird er von Autofill aufgefordert, das vorhandene Passwort zu aktualisieren, anstatt ein neues zu speichern.
Verbesserungen bei der Feldklassifizierung
Android 10 enthält die folgenden Verbesserungen an der Field Classification API.
UserData.Builder-Konstruktor
Der Konstruktor von UserData.Builder
wurde geändert, um besser an das Builder
-Muster anzupassen.
Zuordnung eines Werts zu mehreren Typen von Kategorie-IDs zulassen
Wenn Sie UserData.Builder
in Android 10 verwenden, können Sie einen Wert jetzt mehreren Typen von Kategorie-IDs zuordnen. In früheren Releases wurde eine Ausnahme ausgelöst, wenn ein Wert mehrmals hinzugefügt wurde.
Verbesserte Unterstützung von Kreditkartennummern
Bei der Feldklassifizierung können jetzt vierstellige Zahlen als die letzten vier Ziffern einer Kreditkartennummer erkannt werden.
Unterstützung für die anwendungsspezifische Feldklassifizierung
In Android 10 wurde FillResponse.setUserData()
hinzugefügt. Damit können Sie app-spezifische Nutzerdaten für die Dauer der Sitzung festlegen.
So kann der Autofill-Dienst Typen für Felder mit appspezifischen Inhalten erkennen.
Benutzeroberfläche und Systemsteuerung
Android 10 bietet folgende Verbesserungen der Benutzeroberfläche:
Unterstützung von JVMTI-PopFrame-Capping
In Android 10 wird die Funktion can_pop_frames
in der JVMTI-Implementierung von Android unterstützt. Bei der Fehlerbehebung können Sie mit dieser Funktion Funktionen noch einmal ausführen, nachdem Sie an einem Haltepunkt angehalten und lokale oder globale Werte oder die Implementierung einer Funktion angepasst haben. Weitere Informationen findest du auf der Pop Frame-Referenzseite von Oracle.
Surface Control API
Android 10 bietet eine SurfaceControl
API für den Low-Level-Zugriff auf den System-Compositor (SurfaceFlinger
). Für die meisten Nutzer ist SurfaceView die richtige Methode, den Compositor zu nutzen. Die SurfaceControl
API kann in bestimmten Fällen nützlich sein, z. B.:
- Synchronisierung mehrerer Oberflächen
- Prozessübergreifende Oberflächeneinbettung
- Lebensdauerverwaltung auf niedrigerer Ebene
Die SurfaceControl
API ist sowohl in SDK- als auch in NDK-Bindungen verfügbar.
Die NDK-Implementierung enthält eine API für den manuellen Austausch von Puffern mit dem Compositor. Dies ist eine Alternative für Nutzer, die an die Grenzen von BufferQueue
gestoßen sind.
Erkennung von hängen gebliebenen WebView-Renderern
In Android 10 wird die abstrakte Klasse WebViewRenderProcessClient
eingeführt. Mit dieser können Apps erkennen, ob ein WebView
nicht mehr reagiert. So verwenden Sie diese Klasse:
- Definieren Sie eine eigene Unterklasse und implementieren Sie die Methoden
onRenderProcessResponsive()
undonRenderProcessUnresponsive()
. - Hängen Sie eine Instanz Ihres
WebViewRenderProcessClient
an ein oder mehrereWebView
-Objekte an. - Wenn die
WebView
nicht mehr reagiert, ruft das System dieonRenderProcessUnresponsive()
-Methode des Clients auf und übergibt dieWebView
undWebViewRenderProcess
. WennWebView
ein einzelner Prozess ist, ist der ParameterWebViewRenderProcess
null. Ihre App kann entsprechende Maßnahmen ergreifen, z. B. dem Nutzer ein Dialogfeld anzeigen, in dem er gefragt wird, ob er den Renderingvorgang anhalten möchte.
Wenn WebView
nicht reagiert, ruft das System onRenderProcessUnresponsive()
regelmäßig (nicht öfter als einmal alle fünf Sekunden) auf, ergreift aber keine weiteren Maßnahmen.
Wenn WebView
wieder reagiert, ruft das System onRenderProcessResponsive()
nur einmal auf.
Einstellungsbereiche
Mit Android 10 werden Einstellungen eingeführt, eine API, mit der Apps Nutzern Einstellungen im Kontext ihrer App anzeigen können. So müssen Nutzer nicht in die Einstellungen gehen, um beispielsweise NFC oder Mobilfunkdaten zu ändern, um die App verwenden zu können.
Angenommen, ein Nutzer öffnet einen Webbrowser, während sein Gerät im Flugmodus ist. Vor Android 10 konnte die App nur eine allgemeine Meldung anzeigen, in der der Nutzer aufgefordert wurde, die Einstellungen zu öffnen, um die Verbindung wiederherzustellen. Unter Android 10 kann die Browser-App ein Inline-Steuerfeld mit wichtigen Verbindungseinstellungen wie dem Flugmodus, WLAN (einschließlich Netzwerke in der Nähe) und mobilen Daten anzeigen. Über diesen Bereich können Nutzer die Verbindung wiederherstellen, ohne die App zu verlassen.
Wenn Sie einen Bereich mit Einstellungen anzeigen lassen möchten, lösen Sie eine Intent-Aktion mit einer der folgenden Settings.Panel
-Aktionen aus:
Kotlin
val panelIntent = Intent(Settings.Panel.settings_panel_type) startActivityForResult(panelIntent)
Java
Intent panelIntent = new Intent(Settings.Panel.settings_panel_type); startActivityForResult(panelIntent);
settings_panel_type
kann eines der folgenden sein:
ACTION_INTERNET_CONNECTIVITY
- Hier werden Einstellungen zur Internetverbindung angezeigt, z. B. Flugmodus, WLAN und mobile Daten.
ACTION_WIFI
- Zeigt die WLAN-Einstellungen an, aber nicht die anderen Verbindungseinstellungen. Das ist nützlich für Apps, die für große Uploads oder Downloads eine WLAN-Verbindung benötigen.
ACTION_NFC
- Hier werden alle Einstellungen für die Nahfeldkommunikation (NFC) angezeigt.
ACTION_VOLUME
- Lautstärkeeinstellungen für alle Audiostreams.
Verbesserungen bei der Freigabe
Android 10 bietet eine Reihe von Verbesserungen bei der Freigabe:
Sharing Shortcuts API
Die Sharing Shortcuts API ersetzt die Direct Share APIs.
Anstatt Ergebnisse reaktiv bei Bedarf abzurufen, können Apps mit der Sharing Shortcuts API im Voraus direkte Freigabeziele veröffentlichen. So funktioniert der ShortcutManager
.
Da die beiden APIs ähnlich sind, haben wir die ShortcutInfo
API erweitert, um die Verwendung beider Funktionen zu vereinfachen. Mit der Sharing Shortcuts API können Sie einem Freigabeziel direkt Kategorien oder Personen zuweisen. Die Freigabeziele bleiben im System, bis sie von derselben App aktualisiert oder die App deinstalliert wird.
Der ältere Mechanismus für die direkte Freigabe funktioniert weiterhin, aber Apps, die ihn verwenden, haben eine niedrigere Priorität als Apps, die die Sharing Shortcuts API verwenden.
ShortcutInfo.Builder
bietet zusätzliche Methoden, um zusätzliche Informationen zum Zielvorhaben für die Anzahl der geteilten Inhalte bereitzustellen.
Direkte Freigabeziele
Sie können eine dynamische Verknüpfung als Ziel für die direkte Freigabe veröffentlichen. Weitere Informationen finden Sie unter Direkte Zielvorhaben für die Freigabe veröffentlichen.
ShortcutManagerCompat
ist eine neue AndroidX API, die abwärtskompatibel mit der alten DirectShare API ist. Dies ist die bevorzugte Methode, um Freigabeziele zu veröffentlichen.
Textvorschau
Wenn eine App Textinhalte teilt, kann eine optionale Vorschau der Inhalte in der Sharesheet-Benutzeroberfläche angezeigt werden.
Weitere Informationen zum Hinzufügen von Vorschauen für Rich Text
Weitere Informationen
Weitere Informationen dazu, wie Apps Daten teilen können, finden Sie unter Einfache Daten an andere Apps senden und Einfache Daten von anderen Apps empfangen.
Dunkles Design
Android 10 bietet ein dunkles Design, das sowohl für die Android-Systembenutzeroberfläche als auch für Apps gilt, die auf dem Gerät ausgeführt werden. Ausführliche Informationen finden Sie unter Dunkles Design.
Arten von Diensten im Vordergrund
Mit Android 10 wird das XML-Manifestattribut foregroundServiceType
eingeführt, das Sie in die Definition mehrerer bestimmter Dienste aufnehmen. Es ist möglich, aber nur selten sinnvoll, einem bestimmten Dienst mehrere Typen von Diensten im Vordergrund zuzuweisen.
In der folgenden Tabelle sind die verschiedenen Typen von Diensten im Vordergrund und die Dienste aufgeführt, für die ein bestimmter Typ deklariert werden sollte:
Typ des Diensts im Vordergrund | Beispiel für einen Anwendungsfall für einen Dienst, für den dieser Typ deklariert werden sollte |
---|---|
connectedDevice
| Fitness-Tracker im Blick behalten |
dataSync
| Dateien aus einem Netzwerk herunterladen |
location
| Eine vom Nutzer initiierte Aktion fortsetzen |
mediaPlayback
| Hörbuch, Podcast oder Musik abspielen |
mediaProjection
| Ein Video vom Display des Geräts für kurze Zeit aufnehmen |
phoneCall
| Aktiven Anruf verwalten |
Kotlin
Android 10 enthält die folgenden Updates für die Kotlin-Entwicklung.
Anmerkungen zur Ignorierbarkeit für libcore APIs
Android 10 verbessert die Abdeckung von Annotationen zur Null-Zulässigkeit im SDK für Libcore-APIs. Mit diesen Anmerkungen können App-Entwickler, die in Android Studio entweder die Kotlin- oder die Java-Nullwertanalyse verwenden, Informationen zur Nullwertigkeit erhalten, wenn sie mit diesen APIs interagieren.
Normalerweise führen Verstöße gegen den Vertrag zur Nullbarkeit in Kotlin zu Kompilierungsfehlern. Um die Kompatibilität mit Ihrem vorhandenen Code zu gewährleisten, werden nur die Anmerkungen @RecentlyNullable
und @RecentlyNonNull
hinzugefügt. Dies bedeutet, dass Verstöße gegen die NULL-Zulässigkeit zu Warnungen anstelle von Fehlern führen.
Außerdem werden alle @RecentlyNullable
- oder @RecentlyNonNull
-Anmerkungen, die in Android 9 hinzugefügt wurden, in @Nullable
bzw. @NonNull
geändert.
Das bedeutet, dass Verstöße gegen die Nullbarkeit in Android 10 und höher zu Fehlern statt zu Warnungen führen.
Weitere Informationen zu Änderungen an Anmerkungen finden Sie im Android Developers Blog unter Android Pie SDK ist jetzt Kotlin-freundlicher.
NDK
Android 10 enthält die folgenden NDK-Änderungen.
Verbesserte Fehlerbehebung bei der Eigentümerschaft von Dateideskriptoren
In Android 10 wird „fdsan“ hinzugefügt, mit dem Sie Probleme mit der Inhaberschaft von Dateideskriptoren leichter finden und beheben können.
Fehler im Zusammenhang mit der unsachgemäßen Handhabung des Dateideskriptor-Eigentümers, die sich in der Regel als Verwendung nach dem Schließen und Doppelschließen manifestieren, sind analog zu den Fehlern Verwendung nach der Freigabe und Doppelfreigabe bei der Speicherzuweisung, aber in der Regel viel schwieriger zu diagnostizieren und zu beheben. fdsan versucht, die Fehlverwaltung von Dateideskriptoren zu erkennen und/oder zu verhindern, indem die Inhaberschaft von Dateideskriptoren erzwungen wird.
Weitere Informationen zu Abstürzen im Zusammenhang mit diesen Problemen finden Sie unter Von fdsan erkannter Fehler. Weitere Informationen zu fdsan finden Sie auf der Googlesource-Seite zu fdsan.
ELF-TLS
Für Anwendungen, die mit dem NDK mit einer Mindest-API-Stufe 29 erstellt wurden, kann anstelle von emutls
ELF TLS verwendet werden. Für diese Methode zur Verarbeitung threadlokaler Variablen wurde die Unterstützung für dynamische und statische Linker hinzugefügt.
Für Apps, die für API-Level 28 oder niedriger entwickelt wurden, wurden Verbesserungen für libgcc/compiler-rt
implementiert, um einige emutls
-Probleme zu beheben.
Weitere Informationen findest du unter Android-Änderungen für NDK-Entwickler.
Laufzeit
In Android 10 wurde die folgende Laufzeitänderung eingeführt.
Auslösen der automatischen Speicherbereinigung basierend auf Mallinfo
Wenn kleine Java-Objekte der Plattform auf riesige Objekte im C++-Heap verweisen, können die C++-Objekte oft erst wiederverwendet werden, wenn das Java-Objekt erfasst und beispielsweise finalisiert wurde. In früheren Releases hat die Plattform die Größe vieler C++-Objekte geschätzt, die mit Java-Objekten verknüpft sind. Diese Schätzung war nicht immer genau und führte gelegentlich zu einer stark erhöhten Speichernutzung, da die Plattform die Garbage Collection nicht wie vorgesehen durchführte.
In Android 10 überwacht der Garbage Collector (GC) die Gesamtgröße des vom System malloc()
zugewiesenen Heaps. So wird sichergestellt, dass große malloc()
-Zuweisungen immer in den Berechnungen berücksichtigt werden, die den GC auslösen. Bei Apps, in denen eine große Anzahl von C++-Zuweisungen mit der Java-Ausführung verschachtelt ist, kann die Häufigkeit der Garbage Collection steigen. Bei anderen Apps kann es zu einem leichten Rückgang kommen.
Testen und Fehlerbehebung
Android 10 enthält die folgenden Verbesserungen für das Testen und Entwickeln:
Verbesserungen bei der Systemverfolgung auf dem Gerät
Ab Android 10 können Sie Limits für die Größe und Dauer eines Trace angeben, wenn Sie einen System-Trace auf dem Gerät ausführen. Wenn Sie einen dieser Werte angeben, führt das System einen langen Trace aus und kopiert den Trace-Puffer während der Aufzeichnung regelmäßig in die Zieldatei. Die Aufzeichnung wird beendet, wenn die von Ihnen angegebenen Größen- oder Zeitlimits erreicht werden.
Mit diesen zusätzlichen Parametern können Sie andere Anwendungsfälle testen als mit einem Standard-Trace. Angenommen, Sie möchten einen Leistungsfehler diagnostizieren, der erst auftritt, wenn Ihre App schon seit einiger Zeit ausgeführt wird. In diesem Fall können Sie einen langen Trace über einen ganzen Tag aufzeichnen und dann den CPU-Scheduler, die Laufwerksaktivität, die App-Threads und andere Daten im Bericht analysieren, um die Ursache des Bugs zu ermitteln.
Unter Android 10 und höher werden Trace-Dateien in einem Format gespeichert, das mit Perfetto geöffnet werden kann, einem Open-Source-Projekt für die Leistungsinstrumentierung und -analyse. Sie können Perfetto-Trace-Dateien in das Systrace-Format konvertieren.
Verbesserungen am TextClassifier
Android 10 bietet zusätzliche Funktionen zur Textklassifizierung auf der Benutzeroberfläche TextClassifier
.
Spracherkennung
Die Methode detectLanguage()
funktioniert ähnlich wie bereits vorhandene Klassifizierungsmethoden. Sie empfängt ein TextLanguage.Request
-Objekt und gibt ein TextLanguage
-Objekt zurück.
TextLanguage
-Objekte bestehen aus einer Liste von geordneten Paaren. Jedes Paar enthält ein Gebietsschema und einen entsprechenden Konfidenzwert für die Klassifizierung.
Vorgeschlagene Aktionen für Unterhaltungen
Die Methode suggestConversationActions()
funktioniert ähnlich wie vorhandene Klassifizierungsmethoden. Sie empfängt ein ConversationActions.Request
-Objekt und gibt ein ConversationActions
-Objekt zurück.
ConversationActions
-Objekte bestehen aus einer Liste von ConversationAction
-Objekten. Jedes ConversationAction
-Objekt enthält eine potenzielle vorgeschlagene Aktion und ihren Konfidenzwert.
Intelligente Antworten/Aktionen in Benachrichtigungen
Mit Android 9 können Antwortvorschläge in einer Benachrichtigung angezeigt werden. Android 10 erweitert dies um die Möglichkeit, Vorschläge für absichtsbasierte Aktionen hinzuzufügen. Darüber hinaus generiert die Plattform diese Vorschläge automatisch. Apps können weiterhin eigene Vorschläge machen oder die systemgenerierten Vorschläge deaktivieren.Die API, die zum Generieren dieser Antworten verwendet wird, ist Teil von TextClassifier
und war auch direkt Entwicklern in Android 10 zugänglich.
Weitere Informationen finden Sie im Abschnitt Verbesserungen am TextClassifier.
Wenn Ihre App eigene Vorschläge bereitstellt, generiert die Plattform keine automatischen Vorschläge. Wenn Sie nicht möchten, dass in den Benachrichtigungen Ihrer App vorgeschlagene Antworten oder Aktionen angezeigt werden, können Sie systemgenerierte Antworten und Aktionen deaktivieren. Verwenden Sie dazu setAllowGeneratedReplies()
und setAllowSystemGeneratedContextualActions()
.