Funktionen und APIs unter Android 8.0

Mit Android 8.0 (API-Level 26) werden neuen Funktionen für Nutzer und Entwickler. In diesem Dokument werden die Neuerungen für Entwickler beschrieben.

Sehen Sie sich auch den Artikel Veränderungen am Verhalten von Android 8.0 an, um zu erfahren, in welchen Bereichen sich Plattformänderungen auf Ihre Apps auswirken können.

Nutzererfahrung

Bild-im-Bild-Modus

Bild im Bild unter Android 8.0

Unter Android 8.0 (API-Level 26) können Aktivitäten im Bild-im-Bild-Modus (PIP) gestartet werden. Der PIP-Modus ist eine spezielle Art des Multifenstermodus, die hauptsächlich für die Videowiedergabe verwendet wird. Der PIP-Modus war ursprünglich nur für Android TV verfügbar. Mit Android 8.0 ist die Funktion auch auf anderen Android-Geräten verfügbar.

Eine Aktivität im BiB-Modus ist pausiert, sollte aber um die entsprechenden Inhalte anzuzeigen. Achten Sie daher darauf, dass Ihre App die Wiedergabe in ihrem onPause()-Handler nicht pausiert. In diesem Fall solltest du das Video in onStop() pausieren und die Wiedergabe in onStart() fortsetzen. Weitere Informationen finden Sie unter Multi-Window-Lebenszyklus.

Wenn du angeben möchtest, dass für deine Aktivität der PIP-Modus verwendet werden kann, setze android:supportsPictureInPicture im Manifest auf „wahr“. Ab Android 8.0 ist für PIP das Manifestattribut android:resizeableActivity nicht erforderlich. Sie müssen android:resizeableActivity jedoch auf „wahr“ setzen, wenn Ihre Aktivität andere Multifenstermodi unterstützt.

Mit Android 8.0 (API-Level 26) wird das neue Objekt PictureInPictureParams eingeführt. Sie übergeben es an PIP-Methoden, um anzugeben, wie sich eine Aktivität im PIP-Modus verhalten soll. Dieses Objekt gibt Eigenschaften wie die das bevorzugte Seitenverhältnis der Aktivität.

Die vorhandenen BiB-Methoden, die unter Bild-im-Bild-Modus hinzufügen beschrieben werden, können jetzt nicht nur auf Android TV-Geräten, sondern auf allen Android-Geräten verwendet werden. Außerdem bietet Android 8.0 die folgenden Methoden zur Unterstützung des PIP-Modus:

  • Activity.enterPictureInPictureMode(PictureInPictureParams args): Versetzt die Aktivität im Bild-im-Bild-Modus. Das Seitenverhältnis und andere Konfigurationseinstellungen der Aktivität werden von args angegeben. Falls Felder vorhanden sind in args leer sind, verwendet das System die Werte, die Sie das letzte Mal festgelegt haben, namens Activity.setPictureInPictureParams().

    Die angegebene Aktivität wird in einer Ecke des Bildschirms platziert. der Rest wird der Bildschirm mit der letzten Aktivität gefüllt, die auf dem Bildschirm zu sehen war. Die Aktivität, die in den PIP-Modus wechselt, wird pausiert, bleibt aber aktiv. Wenn der Nutzer auf die PIP-Aktivität tippt, zeigt das System ein Menü an, mit dem er interagieren kann. Während die Aktivität im PIP-Status ist, werden keine Touch-Ereignisse an sie gesendet.

  • Activity.setPictureInPictureParams(): Aktualisiert die PIP-Konfigurationseinstellungen einer Aktivität. Wenn sich die Aktivität gerade im PIP-Modus befindet, werden die Einstellungen aktualisiert. Das ist nützlich, wenn sich das Seitenverhältnis der Aktivität ändert. Befindet sich die Aktivität nicht im BiB-Modus, werden diese Konfigurationseinstellungen unabhängig von enterPictureInPictureMode()-Methode, die Sie aufrufen.

Benachrichtigungen

In Android 8.0 (API-Level 26) haben wir die Benachrichtigungen so umgestaltet, eine einfachere und einheitlichere Möglichkeit bieten, das Benachrichtigungsverhalten zu verwalten und Einstellungen. Zu diesen Änderungen gehören:

    Eine Benachrichtigung bei langem Drücken auf Menü in Android 8.0 (API-Ebene 26)

    Unter Android 8.0 können Nutzer lange auf App Launcher-Symbole drücken, um sich Benachrichtigungen anzusehen.

  • Benachrichtigungskanäle: Einführung von Android 8.0 Benachrichtigungskanäle, mit denen Sie einen vom Nutzer anpassbaren Kanal erstellen können für jede Art von Benachrichtigung, die angezeigt werden soll. Die Benutzeroberfläche verweist auf für Benachrichtigungskanäle als Benachrichtigungskategorien. Informationen zum Implementieren von Benachrichtigungskanälen finden Sie unter Benachrichtigungskanäle verwalten.
  • App-Benachrichtigungspunkte: Android 8.0 unterstützt jetzt die Anzeige von Punkte oder Abzeichen auf App Launcher-Symbolen. Die Benachrichtigungspunkte stehen für Benachrichtigungen vorhanden sind, die der Nutzer noch nicht geschlossen oder auf die er noch nicht reagiert hat. Informationen zur Verwendung von App-Benachrichtigungspunkten finden Sie unter Benachrichtigung Badges.
  • Zurückstellen: Nutzer können Benachrichtigungen zurückstellen, sodass sie für einen bestimmten Zeitraum verschwinden und dann wieder angezeigt werden. Benachrichtigungen werden mit derselben Wichtigkeit angezeigt, mit der sie zum ersten Mal angezeigt wurden. Apps können eine aufgeschobene Benachrichtigung entfernen oder aktualisieren. Durch das Aktualisieren einer aufgeschobenen Benachrichtigung wird sie jedoch nicht wieder angezeigt.
  • Zeitlimit für Benachrichtigungen: Sie können beim Erstellen einer Benachrichtigung mit setTimeoutAfter() ein Zeitlimit festlegen. Mit dieser Methode können Sie einen Zeitraum festlegen, nach dem eine Benachrichtigung sollte storniert werden. Bei Bedarf können Sie eine Benachrichtigung vor Ablauf der angegebenen Zeitüberschreitung abbrechen.
  • Benachrichtigungseinstellungen: Sie können setSettingsText() aufrufen, um den Text festzulegen, der angezeigt wird, wenn Sie über die Intent Notification.INTENT_CATEGORY_NOTIFICATION_PREFERENCES einen Link zu den Benachrichtigungseinstellungen Ihrer App erstellen. Das System kann die folgenden Extras bereitstellen, um die Einstellungen zu filtern, die Ihre App Nutzern anzeigen muss: EXTRA_CHANNEL_ID, NOTIFICATION_TAG und NOTIFICATION_ID.
  • Schließen von Benachrichtigungen: Nutzer können Benachrichtigungen selbst schließen und Apps können sie programmatisch entfernen. Sie können festlegen, wann und warum eine Benachrichtigung geschlossen wird, indem Sie die Methode onNotificationRemoved() aus der Klasse NotificationListenerService implementieren.
  • Hintergrundfarben: Sie können für ein Foto eine Hintergrundfarbe festlegen und aktivieren. Benachrichtigung. Sie sollten diese Funktion nur in Benachrichtigungen für laufenden Aufgaben, die für Nutzende auf einen Blick wichtig sind. So können Sie beispielsweise eine Hintergrundfarbe für Benachrichtigungen zu Wegbeschreibungen oder laufenden Anrufen festlegen. Sie können die gewünschte Hintergrundfarbe auch mit setColor() festlegen. So können Sie mit setColorized() eine Hintergrundfarbe für eine Benachrichtigung aktivieren.
  • Nachrichtenstil: Unter Android 8.0 werden in minimierter Form mehr Inhalte in Benachrichtigungen angezeigt, die die Klasse MessagingStyle verwenden. Sie sollten die Methode MessagingStyle Kurs für Messaging-bezogene Benachrichtigungen. Sie können auch die addHistoricMessage()-Methode, um durch Hinzufügen von Kontext zu einer Unterhaltung bisherigen Nachrichten in Benachrichtigungen zu Messaging.

AutoFill-Framework

Kontoerstellung, Anmeldung und Kreditkartentransaktionen nehmen Zeit in Anspruch und sind anfällig für Fehler. Nutzer können schnell frustriert werden, wenn sie Apps verwenden, die diese Art von sich wiederholenden Aufgaben erfordern.

Unter Android 8.0 (API-Level 26) ist das Ausfüllen von Formularen, z. B. der Anmeldung, möglich und Kreditkartenformularen erleichtern die Einführung des Autofill-Frameworks. Vorhandene und neue Apps unterstützen das Autofill-Framework, nachdem der Nutzer zugestimmt hat. Autofill.

Sie können einige Schritte unternehmen, um die Funktionsweise Ihrer App mit dem Framework zu optimieren. Weitere Informationen finden Sie unter Autofill-Framework – Übersicht.

Herunterladbare Schriftarten

Mit Android 8.0 (API-Level 26) und der Android Support Library 26 kannst du Schriftarten von einer anstatt Schriftarten im APK zu bündeln oder das APK-Downloadschriftarten Diese Funktion reduziert die APK-Größe, erhöht die Erfolgsquote bei der App-Installation und ermöglicht es, dass mehrere Apps denselben Schriftschnitt verwenden.

Weitere Informationen zum Herunterladen von Schriftarten finden Sie unter Herunterladbare Schriftarten.

Schriftarten in XML

Mit Android 8.0 (API-Level 26) wird eine neue Funktion eingeführt, Schriftarten in XML, die können Sie Schriftarten als Ressourcen verwenden. Das bedeutet, dass Sie Schriftarten nicht als Assets bündeln müssen. Schriftarten werden in einer R-Datei kompiliert und sind automatisch als Ressource im System verfügbar. Sie können dann über die des neuen Ressourcentyps font.

Die Support Library 26 bietet vollständigen Support für diese Funktion auf Geräten mit API-Version 14 und höher.

Weitere Informationen zur Verwendung von Schriftarten als Ressourcen und zum Abrufen von Systemschriftarten finden Sie Siehe Schriftarten in XML.

Größe von TextView automatisch anpassen

Unter Android 8.0 (API-Ebene 26) können Sie festlegen, dass sich die Textgröße automatisch an die Größe des TextViews anpasst. So lässt sich die Textgröße auf verschiedenen Bildschirmen oder bei dynamischen Inhalten viel einfacher optimieren. Weitere Informationen zur automatischen Größeanpassung von TextView in Android 8.0 finden Sie unter Autosizing TextView.

Adaptive Symbole

Mit Android 8.0 (API-Level 26) werden adaptive Launcher-Symbole eingeführt. Adaptive Symbole unterstützen visuelle Elemente. -Effekte und können auf verschiedenen Gerätemodellen eine Vielzahl von Formen darstellen. Informationen zum Erstellen adaptiver Symbole finden Sie im Leitfaden Adaptive Symbole.

Farbmanagement

Android-Entwickler von Imaging-Apps können jetzt die Vorteile neuer Geräte nutzen. die über ein breites Farbdisplay verfügen. Damit Bilder mit erweitertem Farbraum angezeigt werden können, müssen Apps in ihrem Manifest (pro Aktivität) ein Flag aktivieren und Bitmaps mit einem eingebetteten Wide-Gamut-Farbprofil (z. B. AdobeRGB, Pro Photo RGB oder DCI-P3) laden.

WebView APIs

Android 8.0 bietet mehrere APIs, die Ihnen bei der Verwaltung helfen. Die WebView-Objekte, die Webinhalte in Ihrer App anzeigen. Zu diesen APIs gehören die Folgendes:

  • API-Version
  • Google Safe Browsing API
  • Termination Handle API
  • Renderer-Wichtigkeits-API

Weitere Informationen zur Verwendung dieser APIs finden Sie unter WebViews verwalten

Die Klasse WebView enthält jetzt eine Safe Browsing API, um die Sicherheit beim Surfen im Web zu erhöhen. Weitere Informationen finden Sie unter Google Safe Browsing API:

Verknüpfungen und Widgets anpinnen

Mit Android 8.0 (API-Ebene 26) können Verknüpfungen und Widgets in Apps angepinnt werden. In Ihrer App können Sie angepinnte Verknüpfungen und Widgets für unterstützte Launcher, vorbehaltlich der Nutzerberechtigung.

Weitere Informationen finden Sie in der Verknüpfungen und Widgets anheften Leitfaden zu den Funktionen.

Maximales Bildschirmseitenverhältnis

Unter Android 8.0 (API-Level 26) wurde die Konfiguration des maximalen Seitenverhältnisses einer App geändert.

Zunächst führt Android 8.0 die neue maxAspectRatio ein, das Sie mit dem du das maximale Seitenverhältnis für deine App festlegen kannst. Außerdem ist unter Android 8.0 und höher das Standard-Maximalseitenverhältnis einer App das native Seitenverhältnis des Geräts, auf dem die App ausgeführt wird.

Weitere Informationen zum Deklarieren des maximalen Seitenverhältnisses finden Sie unter Unterstützung verschiedener Bildschirme.

Unterstützung für mehrere Displays

Ab Android 8.0 (API-Ebene 26) bietet die Plattform erweiterten Support für mehrere Displays. Wenn eine Aktivität den Multifenstermodus unterstützt und auf einem Gerät mit mehreren Bildschirmen ausgeführt wird, können Nutzer die Aktivität von einem Bildschirm auf einen anderen verschieben. Wenn eine App eine Aktivität startet, kann sie angeben, auf welchem Display die Aktivität ausgeführt werden soll.

Hinweis: Wenn eine Aktivität den Mehrfenstermodus unterstützt, wird in Android 8.0 automatisch die Unterstützung für mehrere Displays für diese Aktivität aktiviert. Sie sollten Ihre App testen, ob es in einer Multi-Display-Umgebung gut funktioniert.

Es kann immer nur eine Aktivität fortgesetzt werden, selbst wenn die App hat mehrere Displays. Die Aktivität mit Fokus befindet sich im fortgesetzten Status. Alle anderen sichtbaren Aktivitäten sind pausiert, aber nicht beendet. Weitere Informationen wenn mehrere Aktivitäten sichtbar sind. siehe Mehrfenstermodus Lebenszyklus:

Wenn ein Nutzer eine Aktivität von einer Anzeige auf eine andere verschiebt, passt die Größe der Aktivität an und führt bei Bedarf Laufzeitänderungen durch. Ihre Aktivität kann die Konfigurationsänderung selbst verarbeiten oder es kann dem System erlaubt werden, den Prozess mit Ihrer Aktivität zu löschen und mit den neuen Dimensionen neu zu erstellen. Weitere Informationen finden Sie unter Konfigurationsänderungen verarbeiten.

ActivityOptions bietet zwei neue Methoden zur Unterstützung auf mehreren Displays:

setLaunchDisplayId()
Gibt an, auf welchem Display die Aktivität angezeigt werden soll, wenn sie gestartet wird.
getLaunchDisplayId()
Gibt das aktuelle Startdisplay der Aktivität zurück.

Die adb-Shell wurde um die Unterstützung mehrerer Displays erweitert. Mit dem Befehl shell start kann jetzt eine Aktivität gestartet werden. und die Zielanzeige der Aktivität festlegen:

adb shell start <activity_name> --display <display_id>

Einheitliche Layoutränder und einheitlicher Abstand

Unter Android 8.0 (API-Level 26) ist es einfacher, Situationen anzugeben, in denen sich gegenüberliegende Seiten eines View-Elements denselben Rand oder Abstand haben. Konkret können Sie jetzt die folgenden Attribute in Ihrer Layout-XML-Datei verwenden. Dateien:

Hinweis: Wenn Sie die Logik Ihrer App anpassen, um unterschiedliche Sprachen und Kulturen zu unterstützen, einschließlich der Textrichtung, denken Sie daran, dass diese Attribute keinen Einfluss auf die Werte von layout_marginStart, layout_marginEnd, paddingStart oder paddingEnd haben. Sie können diese Werte zusätzlich zu den neuen vertikalen und horizontalen Layoutattributen selbst festlegen, um ein Layoutverhalten zu erstellen, das von der Textrichtung abhängt.

Zeigererfassung

Einige Apps wie Spiele, Remote Desktop und Virtualisierungsclients von Vorteil ist, wenn Sie mehr Kontrolle über den Mauszeiger erhalten. Die Zeigeraufnahme ist eine neue in Android 8.0 (API-Ebene 26), die eine solche Steuerung durch die Bereitstellung aller Mausereignisse ermöglicht. zur fokussierten Ansicht in Ihrer App.

Ab Android 8.0 kann ein View in deiner App Zeiger erfassen und einen Listener definieren, um erfasste Zeigerereignisse zu verarbeiten. Der Mauszeiger ist in diesem Modus ausgeblendet. Die Ansicht kann die Zeigeraufnahme loslassen wenn die Mausinformationen nicht mehr benötigt werden. Das System kann die Erfassung des Mauszeigers auch aufheben, wenn der Fokus der Ansicht verloren geht, z. B. wenn der Nutzer eine andere App öffnet.

Informationen zur Verwendung dieser Funktion in Ihrer App finden Sie unter Cursorerfassung.

App-Kategorien

Unter Android 8.0 (API-Ebene 26) kann für jede App eine Kategorie angegeben werden, in die sie gehört. Mit diesen Kategorien werden Apps mit ähnlichem Zweck oder ähnlicher Funktion gruppiert, wenn sie Nutzern präsentiert werden, z. B. bei der Datennutzung, Akkunutzung oder Speichernutzung. Sie können eine Kategorie für Ihre App festlegen, indem Sie die Attribut android:appCategory in Ihrem <application> Manifest-Tag enthält.

Android TV-Launcher

Android 8.0 (API-Level 26) enthält eine neue inhaltsorientierte, Startbildschirm von Android TV, verfügbar mit den Android TV-Emulator und Nexus Player-Geräte-Image für Android 8.0. Auf dem neuen Startbildschirm Videocontent in Zeilen für Kanäle, die jeweils mit Programmen einer App auf System. Apps können mehrere Kanäle veröffentlichen und Nutzer können konfigurieren, welche Kanäle auf dem Startbildschirm angezeigt werden sollen. Der Android TV-Startbildschirm enthält auch die Zeile „Als Nächstes ansehen“, die basierend auf den Sehgewohnheiten des Nutzers mit Programmen aus Apps gefüllt wird. Apps können auch Videovorschauen, die automatisch abgespielt werden, wenn sich ein Nutzer auf ein Programm konzentriert. Die APIs zum Befüllen von Kanälen und Programmen sind Teil der TvProvider APIs, die mit Android 8.0 als Android-Supportbibliotheksmodul bereitgestellt werden.

AnimatorSet

Ab Android 8.0 (API-Level 26) unterstützt die AnimatorSet API jetzt das Suchen und Abspielen in umgekehrter Reihenfolge. Mit der Suchfunktion können Sie die Position der Animation auf einen bestimmten zu einem bestimmten Zeitpunkt. Die umgekehrte Wiedergabe ist nützlich, wenn deine App Animationen enthält für Aktionen, die rückgängig gemacht werden können. Anstatt zwei separate Animationen zu definieren, können Sie dieselbe Animation rückwärts abspielen.

Eingabe und Navigation

Tastaturnavigationscluster

Wenn eine Aktivität in Ihrer App eine komplexe Ansichtshierarchie verwendet, wie die in Abbildung 2: Sie können Gruppen von UI-Elementen zur Vereinfachung in Clustern organisieren. Tastaturnavigation auswählen. Nutzer können auf Chromebooks die Tastenkombination „Meta + Tab“ oder „Suche + Tab“ drücken, um von einem Cluster zum nächsten zu wechseln. Gute Beispiele für Cluster sind Seitenleisten, Navigationsleisten, Hauptinhaltsbereiche und Elemente, die viele untergeordnete Elemente enthalten können.

Eine Beispielaktivität mit fünf Navigationsclustern, die der Nutzer über die Tastenkombination für die Navigationscluster aufrufen kann. Die Cluster werden in der folgenden Anordnung angezeigt: Oberer Bereich, linker Seitenbereich, Hauptinhaltsbereich, unterer Bereich und schwebende Aktionsschaltfläche.
Abbildung 2: Aktivität mit 5 Navigationselementen Cluster

So erstellen Sie ein View- oder ViewGroup-Element: einen Cluster, legen Sie den android:keyboardNavigationCluster für true in der Layout-XML-Datei des Elements oder übergeben Sie true in der UI-Logik deiner App in setKeyboardNavigationCluster() einfügen.

Hinweis: Cluster können nicht verschachtelt werden. Nicht verschachtelte Cluster können jedoch auf verschiedenen Hierarchieebenen erscheinen. Wenn Sie versuchen, verschachteln, behandelt das Framework nur die obersten ViewGroup-Element als Cluster.

Auf Geräten mit Touchscreens können Sie einen Cluster ViewGroup-Objekt android:touchscreenBlocksFocus-Element auf true um Nur Cluster-Navigation in und aus dem Cluster zulassen. Wenn Sie diese Konfiguration auf einen Cluster anwenden, können Nutzer nicht mit der Tabulatortaste oder den Pfeiltasten zwischen dem Cluster und anderen Bereichen wechseln. Stattdessen müssen sie die Tastenkombination für die Clusternavigation drücken.

Standardfokus ansehen

Unter Android 8.0 (API-Level 26) können Sie der View zuweisen, dass sie den Fokus erhalten soll, nachdem eine (erneut) erstellte Aktivität fortgesetzt wurde und der Nutzer eine Navigationstaste auf der Tastatur drückt, z. B. die Tabulatortaste. Um diese Einstellung auf „Standardmäßig fokussiert“ anzuwenden eines View-Elements festlegen, android:focusedByDefault-Attribut true in der Layout-XML-Datei, die das UI-Element enthält, oder übergeben Sie true an setFocusedByDefault() in deinem die UI-Logik der App.

Sprachausgabe

Aktivitäten und Dienste können Instanzen von TextToSpeech verwenden, um Inhalte zu diktieren und auszusprechen. Ab Unter Android 8.0 (API-Level 26) kann deine App präzisere Zeitinformationen abrufen wann eine Sprachausgabe-Engine einzelne synthetisierte Wörter spricht, solange die Suchmaschine diese Informationen bereitstellt. Mit dieser Funktion können Sie um die Aufmerksamkeit auf bestimmte Wörter zu lenken, während die Sprachausgabe-Engine spricht .

Wenn Sie diese Verbesserungen der Sprachausgabe in Ihrer App verwenden möchten, registrieren Sie eine Instanz von UtteranceProgressListener. Im Rahmen der Registrierungsprozess, fügen Sie einen Handler für die onRangeStart() .

Die Sprachausgabe-Engine ruft auf, rangeStart() zum Aufnehmen Den Zeitpunkt, zu dem die Audiowiedergabe eines bestimmten Textbereichs erwartet wird um zu beginnen. Wenn die Audiowiedergabe für diesen Textbereich beginnt, wird der Titel der App onRangeStart() ausgeführt wird. Deine App kann dann auf diesen Callback reagieren, z. B. durch den Textbereich markiert, der der Äußerung zugeordnet ist.

Weitere Informationen zum Überwachen des Wiedergabefortschritts einer Sprachausgabe-Engine findest du in der Referenz für die Klasse UtteranceProgressListener.

System

Neue StrictMode-Detektoren

Android 8.0 (API-Ebene 26) enthält drei neue StrictMode-Detektoren, mit denen sich potenzielle Fehler in Ihrer App leichter finden lassen:

Daten im Cache

Android 8.0 (API-Ebene 26) bietet bessere Anleitungen und Verhaltensweisen für im Cache gespeicherte Daten. Jede App erhält jetzt ein Speicherplatzkontingent für zwischengespeicherte Daten, das von getCacheQuotaBytes(UUID) zurückgegeben wird.

Wenn das System Speicherplatz freigeben muss, werden zuerst die Cachedateien von Apps gelöscht, die ihr zugewiesenes Kontingent am weitesten überschreiten. Wenn Sie also die Größe Ihrer im Cache gespeicherten Daten unter dem zugewiesenen Kontingent halten, werden Ihre Cachedateien bei Bedarf als Letztes im System gelöscht. Wenn das System entscheidet, welche im Cache gespeicherten Dateien in Ihrer App gelöscht werden sollen, Die ältesten Dateien werden zuerst berücksichtigt (basierend auf der Änderungszeit).

Außerdem gibt es zwei neue Verhaltensweisen, die du pro Verzeichnis aktivieren kannst. wie das System im Cache gespeicherte Daten freigibt:

  • Mit StorageManager.setCacheBehaviorAtomic() kann angegeben werden, dass ein Verzeichnis und sein gesamter Inhalt als eine einzelne atomare Einheit gelöscht werden sollen.
  • Mit setCacheBehaviorTombstone(File, boolean) kann angegeben werden, dass Dateien in einem Verzeichnis nicht gelöscht werden, sondern auf 0 Byte im Die leere Datei bleibt unverändert.

Wenn Sie Speicherplatz für große Dateien zuweisen müssen, erwägen Sie die Verwendung des neuen allocateBytes(FileDescriptor, long) API, die automatisch gelöscht wird im Cache gespeicherte Dateien anderer Apps (falls erforderlich), um Ihrer Anfrage nachzukommen. Wenn Sie entscheiden, über genügend Speicherplatz für Ihre neuen Daten verfügt, rufen Sie getAllocatableBytes(UUID) statt zu verwenden getUsableSpace(), da hier alle im Cache gespeicherten Daten berücksichtigt werden. Daten, die das System für Sie löschen möchte.

Seitenwechsel für Contentanbieter

Wir haben die Contentanbieter aktualisiert, um das Laden eines großen Datensatzes Seite für Seite zu unterstützen. Beispielsweise kann eine Foto-App mit vielen Tausenden von Bildern nach einer Teilmenge der Daten abfragen, die auf einer Seite angezeigt werden sollen. Jede Seite mit Ergebnissen, die von einem Inhaltsanbieter zurückgegeben wird, wird durch ein einzelnes Cursor-Objekt dargestellt. Sowohl ein Client als auch ein Anbieter müssen das Auslagern implementieren, um diese Funktion nutzen zu können.

Detaillierte Informationen zu den Änderungen bei Contentanbietern finden Sie unter ContentProvider und ContentProviderClient.

Anfragen zur Aktualisierung von Inhalten

Die ContentProvider und ContentResolver Klassen enthalten jetzt jeweils einen refresh()-Methode, mit der Kunden leichter erkennen können, die angeforderten Informationen auf dem neuesten Stand sind.

Sie können benutzerdefinierte Logik für die Aktualisierung von Inhalten hinzufügen, indem Sie ContentProvider erweitern. Achten Sie darauf, die refresh()-Methode für die Rückgabe true und zeigt den Kunden deines Anbieters an, dass du versucht hast, um die Daten selbst zu aktualisieren.

Ihre Clientanwendung kann aktualisierte Inhalte explizit anfordern, indem eine andere Methode aufgerufen wird, die ebenfalls refresh() genannt wird. Wenn Sie diese Methode aufrufen, den URI der zu aktualisierenden Daten übergeben.

Hinweis:Da Sie möglicherweise Daten über ein Netzwerk anfordern, sollten Sie refresh() aus Clientseite nur dann angezeigt, wenn es deutliche Hinweise darauf gibt, dass der Inhalt veraltet ist. Der häufigste Grund für diese Art der Inhaltsaktualisierung ist eine Reaktion auf zum Aktualisieren wischen Touch-Geste, mit der explizit die aktuelle Benutzeroberfläche angefordert wird, um den aktuellen Inhalt anzuzeigen.

JobScheduler-Verbesserungen

Android 8.0 (API-Level 26) enthält eine Reihe von Verbesserungen für JobScheduler. Diese Verbesserungen erleichtern Ihre App um dem neuen Hintergrund Ausführungslimits, da Sie geplante Jobs in der Regel die jetzt eingeschränkten Hintergrunddienste oder implizite Übertragungsempfänger verwenden.

Zu den Änderungen an JobScheduler gehören:

  • Sie können jetzt einem geplanten Auftrag eine Arbeitswarteschlange zuordnen. So fügen Sie eine Aufgabe hinzu: eines Jobs erstellen, rufen Sie JobScheduler.enqueue() Wenn der Job ausgeführt wird, können ausstehende Arbeiten aus der Warteschlange entfernt und verarbeitet werden. Diese Funktion unterstützt viele Anwendungsfälle, für die zuvor ein Hintergrunddienst gestartet werden musste, insbesondere Dienste, die IntentService implementieren.
  • Die Android-Supportbibliothek 26.0.0 enthält eine neue JobIntentService-Klasse, die dieselben Funktionen wie IntentService bietet, aber bei der Ausführung unter Android 8.0 (API-Ebene 26) oder höher Jobs anstelle von Diensten verwendet.
  • Sie können jetzt JobInfo.Builder.setClipData() anrufen, um eine ClipData mit einem Job zu verknüpfen. Mit dieser Option können Sie URI-Berechtigungen einem Job zuweisen, ähnlich wie diese Berechtigungen an Context.startService() weitergegeben werden können. Sie können URI-Berechtigungen auch mit Intents in Arbeitswarteschlangen verwenden.
  • Geplante Jobs unterstützen jetzt mehrere neue Einschränkungen:
    JobInfo.isRequireStorageNotLow()
    Der Job wird nicht ausgeführt, wenn auf dem Gerät nur noch wenig Speicherplatz verfügbar ist.
    JobInfo.isRequireBatteryNotLow()
    Der Job wird nicht ausgeführt, wenn der Akkustand den kritischen Grenzwert erreicht oder unterschreitet. Bei diesem Wert wird auf dem Gerät das Systemdialogfeld Akkustand niedrig angezeigt.
    NETWORK_TYPE_METERED
    Job erfordert eine kostenpflichtige Netzwerkverbindung, wie die meisten mobilen Daten Abos.

Benutzerdefinierter Datenspeicher

Unter Android 8.0 (API-Ebene 26) können Sie für Ihre Einstellungen einen benutzerdefinierten Datenspeicher angeben. Das kann nützlich sein, wenn Ihre App die Einstellungen in einer Cloud oder einer lokalen Datenbank speichert oder wenn die Einstellungen gerätespezifisch sind. Weitere Informationen zur Implementierung des Datenspeichers finden Sie unter Benutzerdefinierter Datenspeicher.

Medienverbesserungen

VolumeShaper

Es gibt eine neue VolumeShaper-Klasse. Verwenden Sie kurze automatische Lautstärkeübergänge wie Über- und Überblendungen. Weitere Informationen finden Sie unter Amplitude mit VolumeShaper steuern.

Verbesserungen beim Audiofokus

Audio-Apps teilen die Audioausgabe auf einem Gerät, indem sie den Audiofokus anfordern und wieder aufheben. Eine App verarbeitet Änderungen im Fokus, indem sie die Wiedergabe startet oder beendet oder die Lautstärke verringert. Es gibt eine neue AudioFocusRequest-Klasse. Die Verwendung dieser Klasse als Parameter von requestAudioFocus(), Apps haben neue Funktionen für den Umgang mit Änderungen des Audiofokus: Automatic Ducking und verzögerter Fokuszuwachs.

Medienmesswerte

Eine neue getMetrics()-Methode gibt PersistableBundle zurück. Objekt, das die Konfiguration enthält und Leistungsinformationen in Form einer Zuordnung von Attributen und Werten. Die Methode getMetrics() ist für die folgenden Medienklassen definiert:

Die Messwerte werden für jede Instanz separat erfasst und bleiben für die gesamte Lebensdauer der Instanz erhalten. Wenn keine Messwerte verfügbar sind, gibt die Methode null. Welche Messwerte zurückgegeben werden, hängt von der Klasse ab.

MediaPlayer

Ab Android 8.0 (API-Ebene 26) kann MediaPlayer wiedergegeben werden. DRM-geschützt und verschlüsselte Medien mit HLS-Sampleebene.

Android 8.0 bringt eine neue Überlastung seekTo()-Befehl, der eine detailgenaue wenn Sie zu einem Frame springen. Er enthält einen zweiten Parameter, der einen Suchmodus angibt:

  • SEEK_PREVIOUS_SYNC verschiebt die Medienposition in einen Synchronisierungs- oder Schlüsselframe die mit einer Datenquelle verknüpft ist, die sich direkt vor oder zum angegebenen Zeitpunkt befindet.
  • SEEK_NEXT_SYNC verschiebt die Medienposition zu einem Synchronisierungs- oder Schlüsselframe, der dem mit einer Datenquelle, die sich direkt nach oder zum angegebenen Zeitpunkt befindet.
  • SEEK_CLOSEST_SYNC verschiebt die Medienposition in einen Synchronisierungs- oder Schlüsselframe die mit einer Datenquelle verknüpft ist, die sich zum angegebenen Zeitpunkt am nächsten befindet.
  • SEEK_CLOSEST verschiebt die Medienposition zu einem Frame (nicht unbedingt ein Synchron- oder Schlüsselframe), der mit einer Datenquelle verknüpft ist, die sich am nächsten zur angegebenen Zeit befindet oder zu der die angegebene Zeit gehört.

Bei kontinuierlicher Suche sollten Apps einen der SEEK_-Modi anstelle von SEEK_CLOSEST verwenden, da dieser relativ langsamer, aber genauer ist.

MediaRecorder

  • MediaRecorder unterstützt jetzt das MPEG2_TS-Format, das für Streaming:

    Kotlin

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS)

    Java

    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_2_TS);

    MediaRecorder.OutputFormat ansehen

  • Der MediaMuxer kann jetzt beliebig viele Audio- und Videostreams verarbeiten. Du bist nicht mehr auf einen Audio- und/oder einen Videotrack beschränkt. Mit addTrack() kannst du beliebig viele Titel zusammenmischen.
  • MediaMuxer kann auch einen oder mehrere Metadatentracks hinzufügen, die benutzerdefinierte pro Frame enthalten. Informationen. Das Format der Metadaten wird von Ihrer Anwendung definiert. Die Metadaten-Track wird nur für MP4-Container unterstützt.

Metadaten können für die Offlineverarbeitung nützlich sein. Zum Beispiel Gyroskopsignale kann der Sensor zur Videostabilisierung verwendet werden.

Wenn du einen Metadaten-Track hinzufügst, muss das MIME-Format des Tracks mit dem Präfix „application/“ beginnen. Das Schreiben von Metadaten entspricht dem Schreiben von Video-/Audiodaten, mit der Ausnahme, dass die Daten nicht aus einem MediaCodec stammen. Stattdessen gibt die App eine ByteBuffer mit einem zugehörigen Zeitstempel für den writeSampleData()-Methode. Der Zeitstempel muss derselben Zeitbasis wie die Video- und Audiotracks entsprechen.

In der generierten MP4-Datei wird die im Abschnitt definierte TextMetaDataSampleEntry verwendet 12.3.3.2 des ISOBMFF zum Signalisieren des MIME-Formats der Metadaten. Wenn du die Datei mit dem Metadaten-Track mit MediaExtractor extrahierst, wird das MIME-Format der Metadaten in MediaFormat extrahiert.

Verbesserter Zugriff auf Mediendateien

Mit dem SAF (Storage Access Framework) können Apps eine benutzerdefinierte DocumentsProvider bereitstellen, über die andere Apps auf Dateien in einer Datenquelle zugreifen können. Tatsächlich kann ein Dokumentanbieter auch Zugriff auf Dateien gewähren, die sich im Netzwerkspeicher befinden oder ein Protokoll wie Media Transfer Protocol (MTP) verwenden.

Der Zugriff auf große Mediendateien aus einer Remote-Datenquelle Herausforderungen:

  • Mediaplayer benötigen einen suchbaren Zugriff auf eine Datei von einem Dokumentanbieter. In Fällen, in denen sich eine große Mediendatei in einer Remote-Datenquelle befindet, Der Dokumentenanbieter muss alle Daten im Voraus abrufen und einen Snapshot erstellen der Dateibeschreibung. Der Mediaplayer kann die Datei ohne die Datei nicht wiedergeben. Beschreibung, sodass die Wiedergabe erst beginnen kann, wenn der Dokumentanbieter den Vorgang abgeschlossen hat. die Datei herunterladen.
  • Manager von Mediensammlungen, wie etwa Foto-Apps, müssen eine Reihe von Zugriffs-URIs, um Medien zu erreichen, die auf einer externen SD-Karte über einen Ordner. Dieses Zugriffsmuster ermöglicht Massenoperationen auf Medien wie Verschieben, Kopieren und Löschen – ziemlich langsam.
  • Manager von Mediensammlungen können den Speicherort eines Dokuments nicht anhand der URI. Dadurch ist es für diese Arten von Apps schwierig, Nutzern wo eine Mediendatei gespeichert wird.

Mit Android 8.0 lässt sich jeder dieser Herausforderungen meistern, indem der Speicherzugriff verbessert wird. Framework.

Anbieter benutzerdefinierter Dokumente

Ab Android 8.0 ermöglicht das Storage Access Framework benutzerdefinierte Dokumente zum Erstellen suchbarer Dateideskriptoren für Dateien in einem Remote-Datenquelle. Die SAF kann eine Datei öffnen, um eine nativ suchbare Datei abzurufen Beschreibung. Der SAF sendet dann Anfragen für einzelne Bytes an den Dokumentenanbieter. Mit dieser Funktion kann ein Dokumentanbieter den genauen Bereich der von einer Mediaplayer-App angeforderten Byte an, anstatt den gesamten im Voraus zu erstellen.

Um diese Funktion zu nutzen, müssen Sie die neue StorageManager.openProxyFileDescriptor()-Methode. Die Die Methode openProxyFileDescriptor() akzeptiert ein ProxyFileDescriptorCallback-Objekt als Callback. Der SAF ruft den Rückruf immer dann auf, wenn eine Clientanwendung Dateivorgänge auf den vom Dokumentanbieter zurückgegebenen Dateideskriptor ausführt.

Direkter Zugriff auf Dokumente

Ab Android 8.0 (API-Ebene 26) können Sie mit der Methode getDocumentUri() einen URI abrufen, der auf dasselbe Dokument verweist wie die angegebene mediaUri. Da der zurückgegebene URI jedoch von einem DocumentsProvider, Manager von Mediensammlungen haben Zugriff direkt in das Dokument, ohne dass Sie Baumstrukturen von bereichsbezogenen Verzeichnissen durchlaufen müssen. Dadurch können die Medienmanager Dateivorgänge für das Dokument durchführen. erheblich schneller.

Achtung:Mit der Methode getDocumentUri() können nur Mediendateien gesucht werden. werden Apps nicht mit der auf diese Dateien zugreifen dürfen. Weitere Informationen dazu, wie Sie Zugriff erhalten Berechtigung für Mediendateien finden Sie in der Referenzdokumentation.

Pfade zu Dokumenten

Wenn Sie das Storage Access Framework in Android 8.0 (API-Level 26) verwenden, können Sie die Methode findDocumentPath(), in beiden verfügbar DocumentsContract und DocumentsProvider Klassen, um den Pfad ausgehend vom Stammverzeichnis eines Dateisystems anhand der ID. Die Methode gibt diesen Pfad in einem DocumentsContract.Path-Objekt. Wenn ein Dateisystem mehrere Pfade zum selben Dokument definiert hat, gibt die Methode den Pfad zurück, der am häufigsten verwendet wird, um das Dokument mit der angegebenen ID aufzurufen.

Diese Funktion ist in den folgenden Szenarien besonders nützlich:

  • Ihre App verwendet ein Dialogfeld „Als Datei speichern“, in dem der Speicherort eines bestimmten Dokuments angezeigt wird.
  • Ihre App zeigt Ordner in einer Suchergebnisseite an und muss die untergeordneten Dokumente in einem bestimmten Ordner laden, wenn der Nutzer diesen Ordner auswählt.

Hinweis: Wenn Ihre App nur auf einige der Dokumente im Pfad zugreifen darf, enthält der Rückgabewert von findDocumentPath() nur die Ordner und Dokumente, auf die Ihre App zugreifen kann.

Überwachen der Audiowiedergabe

Der AudioManager-Systemdienst verwaltet eine Liste der aktiven AudioPlaybackConfiguration-Objekte, von denen jedes Informationen zu einer bestimmten Audiowiedergabesitzung enthält. Ihre App kann rufen Sie den Satz derzeit aktiver Konfigurationen ab, indem Sie getActivePlaybackConfigurations()

Ab Android 8.0 (API-Ebene 26) können Sie einen Rückruf registrieren, der Ihre App benachrichtigt, wenn sich eines oder mehrere AudioPlaybackConfiguration-Objekte geändert haben. Rufen Sie dazu registerAudioPlaybackCallback() auf und übergeben Sie eine Instanz von AudioManager.AudioPlaybackCallback. Die Die Klasse AudioManager.AudioPlaybackCallback enthält die onPlaybackConfigChanged()-Methode, die das System aufruft, wenn die Änderungen der Wiedergabekonfiguration.

Konnektivität

Wi‑Fi Aware

Android 8.0 (API-Ebene 26) unterstützt Wi‑Fi Aware, das auf der NAN-Spezifikation (Neighbor Awareness Networking) basiert. Auf Geräten mit der entsprechenden Wi-Fi Aware-Hardware, Apps und Geräte in der Nähe können die Geräte erkennen und kommunizieren über WLAN ohne Internetzugang. Wir arbeiten mit unserer Hardware -Partner so bald wie möglich auf ihre Geräte mit Wi-Fi Aware-Technologie umstellen. Informationen zur Einbindung von Wi‑Fi Aware in Ihre App finden Sie unter Wi‑Fi Aware.

Bluetooth

Android 8.0 (API-Ebene 26) erweitert die Bluetooth-Unterstützung der Plattform um die folgenden Funktionen:

  • Unterstützung für den Standard AVRCP 1.4, der das Durchsuchen von Mediatheken ermöglicht
  • Unterstützung des BLE-5.0-Standards (Bluetooth Low Energy)
  • Integration des Sony LDAC-Codecs in den Bluetooth-Stack.

Begleitgerät koppeln

Android 8.0 (API-Ebene 26) bietet APIs, mit denen Sie die Dialogfeld für Kopplungsanfrage beim Koppeln mit Begleitgeräten über Bluetooth, BLE und WLAN Weitere Informationen finden Sie unter Kopplung des Companion-Geräts.

Weitere Informationen zur Verwendung von Bluetooth auf Android-Geräten finden Sie im Leitfaden Bluetooth. Änderungen an Bluetooth, die nur für Android 8.0 (API-Level 26) gelten, finden Sie auf der Seite Verhaltensänderungen unter Android 8.0 im Abschnitt Bluetooth.

Inhalte teilen

Intelligentes Teilen

Android 8.0 (API-Ebene 26) lernt die personalisierten Freigabeeinstellungen der Nutzer kennen und erkennt für jede Art von Inhalt besser, welche Apps zum Teilen geeignet sind. Wenn ein Nutzer beispielsweise ein Foto von einem Beleg macht, kann Android 8.0 eine App zum Erfassen von Ausgaben vorschlagen. Wenn der Nutzer ein Selfie macht, kann eine Social-Media-App das Bild besser verarbeiten. Android 8.0 lernt diese Muster automatisch anhand der personalisierten Einstellungen der Nutzer.

Die intelligente Freigabe funktioniert auch für andere Inhaltstypen als image, z. B. audio, video, text und URL.

Wenn Sie die intelligente Freigabe aktivieren möchten, fügen Sie dem Intent, über den die Inhalte geteilt werden, eine ArrayList mit bis zu drei String-Anmerkungen hinzu. Die Anmerkungen sollten die wichtigsten Komponenten oder Themen in den Inhalten beschreiben. Das folgende Codebeispiel zeigt, wie Sie dem Intent Anmerkungen hinzufügen:

Kotlin

val annotations: ArrayList<String> = arrayListOf(
        "topic1",
        "topic2",
        "topic3"
)

intent.putStringArrayListExtra(
        Intent.EXTRA_CONTENT_ANNOTATIONS,
        annotations
)

Java

ArrayList<String> annotations = new ArrayList<>();

annotations.add("topic1");
annotations.add("topic2");
annotations.add("topic3");

intent.putStringArrayListExtra(
    Intent.EXTRA_CONTENT_ANNOTATIONS,
    annotations
);

Ausführliche Informationen zu Anmerkungen zur intelligenten Freigabe finden Sie unter EXTRA_CONTENT_ANNOTATIONS.

Textklassifikator

Auf kompatiblen Geräten können Apps mit einem neuen Textklassifikator prüfen, ob ein String entspricht einem bekannten Klassifikator-Entitätstyp und es wird eine Auswahl vorgeschlagen Alternativen. Zu den vom System erkannten Entitäten gehören Adressen, URLs, Telefonnummern und E-Mail-Adressen. Weitere Informationen finden Sie unter TextClassifier.

Bedienungshilfen

Android 8.0 (API-Level 26) unterstützt mehrere neue Bedienungshilfen für Entwickler, die eigene Bedienungshilfen erstellen:

Weitere Informationen dazu, wie Sie Ihre App barrierefreier gestalten können, finden Sie unter Barrierefreiheit.

Sicherheit und Datenschutz

Berechtigungen

Mit Android 8.0 (API-Ebene 26) werden mehrere neue Berechtigungen im Zusammenhang mit der Telefonie eingeführt:

  • Mit der Berechtigung ANSWER_PHONE_CALLS kann Ihre App eingehende Anrufe programmatisch annehmen. Wenn Sie einen eingehenden Anruf in Ihrer App verarbeiten möchten, können Sie die Methode acceptRingingCall() verwenden.
  • Mit der Berechtigung READ_PHONE_NUMBERS erhält Ihre App Lesezugriff auf die auf einem Gerät gespeicherten Telefonnummern.

Beide Berechtigungen sind als gefährlich eingestuft und gehören zur Berechtigungsgruppe PHONE.

Neue APIs für den Kontozugriff und Discovery-APIs

Android 8.0 (API-Level 26) enthält einige Verbesserungen Apps Zugriff auf Nutzerkonten erhalten. Für die von ihm verwalteten Konten Authenticatoren können anhand ihrer eigenen Richtlinien entscheiden, oder Konten für eine App offenlegen. Das Android-System erfasst Anwendungen, die auf ein bestimmtes Konto zugreifen.

In früheren Android-Versionen mussten Apps, die die Liste der Nutzerkonten im Blick behalten wollten, Aktualisierungen zu allen Konten erhalten, einschließlich Konten mit nicht zugehörigen Typen. Android 8.0 bietet addOnAccountsUpdatedListener(android.accounts.OnAccountsUpdateListener, android.os.Handler, boolean, java.lang.String[]) Methode, mit der Apps eine Liste von Kontotypen angeben können für die Kontoänderungen empfangen werden sollen.

API-Änderungen

AccountManager bietet sechs neue Methoden, mit denen die Apps können auf ein Konto zugreifen:

Mit Android 8.0 (API-Ebene 26) werden zwei spezielle Werte für den Paketnamen eingeführt, um Sichtbarkeitsstufen für Anwendungen anzugeben, die nicht mit der Methode setAccountVisibility(android.accounts.Account, java.lang.String, int) festgelegt wurden. Die PACKAGE_NAME_KEY_LEGACY_VISIBLE wird der Sichtbarkeitswert auf Apps angewendet, GET_ACCOUNTS und Zielversionen Android 8.0 oder älter als Android 8.0 Signaturen mit dem Authenticator für jede Android-Version übereinstimmen. PACKAGE_NAME_KEY_LEGACY_NOT_VISIBLE ist ein Standardwert für die Sichtbarkeit von Apps, die zuvor nicht festgelegt wurden und für die PACKAGE_NAME_KEY_LEGACY_VISIBLE nicht gilt.

Weitere Informationen zu den neuen APIs für den Kontozugriff und die Kontoermittlung finden Sie in den Referenzen für AccountManager und OnAccountsUpdateListener.

Testen

Instrumentierungstests

Android 8.0 (API-Level 26) bietet folgende zusätzliche Unterstützung für die Instrumentierungstests Ihrer App:

Für nicht standardmäßige App-Prozesse ausführen

Sie können jetzt angeben, dass ein bestimmter Instrumentierungstest für einen Prozess außerhalb des Standardprozesses Ihrer App ausgeführt werden soll. Diese Konfiguration ist nützlich, wenn Ihre App mehrere Aktivitäten enthält, die in verschiedenen Prozessen ausgeführt werden.

Wenn Sie eine nicht standardmäßige Prozessinstrumentierung definieren möchten, rufen Sie die Manifestdatei und dann das gewünschte Element <instrumentation> auf. Fügen Sie den android:targetProcess-Attribut und legen Sie seinen Wert auf einen der folgenden Werte fest: Folgendes:

  • Der Name eines bestimmten Prozesses.
  • Eine durch Kommas getrennte Liste von Prozessnamen.
  • Einen Platzhalter ("*"), mit dem die Instrumentierung ausgeführt werden kann jeden gestarteten Prozess, der Code in dem Paket ausführt, Das Attribut android:targetPackage

Während der Instrumentierungstest ausgeführt wird, können Sie mit getProcessName() prüfen, welcher Prozess getestet wird.

Ergebnisse während eines Tests melden

Sie können jetzt Ergebnisse während der Ausführung des Instrumentierungstests melden, anstatt danach. Rufen Sie dazu addResults() auf.

Intents für Tests simulieren

Um es einfacher zu machen, isolierte, unabhängige UI-Tests für die werden mit Android 8.0 (API-Level 26) onStartActivity()-Methode. Sie überschreiben diese Methode in einer benutzerdefinierten Unterklasse der Klasse Instrumentation.ActivityMonitor, um einen bestimmten Intent zu verarbeiten, den Ihre Testklasse aufruft.

Wenn die Testklasse den Intent aufruft, gibt die Methode einen Stub zurück. Instrumentation.ActivityResult-Objekt, anstatt es auszuführen den Intent selbst. Wenn Sie diese Mock-Intent-Logik in Ihren Tests verwenden, können Sie sich darauf konzentrieren, wie Ihre Aktivität den Intent vorbereitet und verarbeitet, den Sie an eine andere Aktivität oder eine ganz andere App übergeben.

Laufzeit und Werkzeuge

Plattformoptimierungen

Android 8.0 (API-Level 26) bietet Laufzeit- und andere Optimierungen der Plattform, die zu einer Reihe von Leistungsverbesserungen führen. Zu diesen Optimierungen gehören die automatische Verdichtung der automatischen Speicherbereinigung, Speicher effizienter nutzen und den Code gespeichert haben.

Diese Optimierungen führen zu kürzeren Bootzeiten sowie zu einer besseren Leistung des Betriebssystems und der Apps.

Aktualisierte Java-Sprachunterstützung

Android 8.0 (API-Ebene 26) unterstützt mehrere zusätzliche OpenJDK Java APIs:

Weitere Informationen zu den Klassen und Methoden in diesen neu hinzugefügten finden Sie in der API-Referenzdokumentation.

Wenn Sie Java 8-Sprachfunktionen in Android Studio verwenden möchten, sollten Sie die neueste Vorschauversion herunterladen.

Aktualisierte ICU4J Android Framework APIs

Android 8.0 (API-Level 26) erweitert die ICU4J-Android-Framework APIs, eine Teilmenge der ICU4J APIs, mit denen App-Entwickler android.icu-Paket verwenden. Diese APIs verwenden die auf dem Gerät vorhandenen Lokalisierungsdaten. Sie können den APK-Footprint reduzieren, indem Sie die ICU4J-Bibliotheken nicht in Ihrem APK kompilieren.

Tabelle 1 ICU-, CLDR- und Unicode-Versionen, die in Android verwendet werden.

Android-API-Level ICU-Version CLDR-Version Unicode-Version
Android 7.0 (API-Ebene 24), Android 7.1 (API-Ebene 25) 56 28 8.0
Android 8.0 (API-Level 26) 58,2 30.0.3 9.0

Weitere Informationen zur Internationalisierung unter Android, darunter ICU4J-Unterstützung, siehe Internationalisierung auf Android-Geräten

Android Enterprise

Für Geräte mit Android 8.0 (API-Level 26) wurden neue Unternehmensfunktionen und APIs eingeführt. Zu den Highlights gehören:

  • Mit Arbeitsprofilen auf vollständig verwalteten Geräten können Unternehmen personenbezogenen Daten und die Verwaltung von beidem.
  • Über die API-Delegierung können Geräte- und Profilinhaber Apps zuweisen auf andere Anwendungen übertragen.
  • Durch Verbesserungen der Nutzerfreundlichkeit bei der Bereitstellung (einschließlich neuer Anpassungsoptionen) wird die Einrichtungszeit verkürzt.
  • Mit den neuen Einstellungen für Bluetooth, WLAN, Sicherung und Sicherheit können Unternehmen mehr Funktionen des Geräts verwalten. Mit dem Logging der Netzwerkaktivität können Unternehmen Störungen.

Weitere Informationen zu diesen und anderen neuen Android Enterprise-APIs und -Funktionen Siehe Android im Unternehmen.