English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Prinzip und Eigenschaften der Bildcaching in Android, Vergleich

Dies ist der Inhalt, den ich auf dem MDCC geteilt habe (wenig geändert) und der auch bei der Veröffentlichung der ersten Episode der Quellcodeanalyse vorgestellt wurde. Die Quellcodeanalyse wird langsam weitergehen.

Ein Vergleich der Designs und Prinzipien einiger Bildcaches, auch wenn man sie nicht verwendet, kann man ihre Implementierung in bestimmten Eigenschaften verstehen.

Ein: Grundeinformationen der vier Hauptbildcaches


Universal ImageLoader ist ein frühzeitig freigegebener Bildcache, der in der frühen Phase von vielen Anwendungen verwendet wurde.

Picasso ist ein Open-Source-Projekt von Square, und sein Hauptentwickler ist JakeWharton, daher bekannt.

Glide ist ein Open-Source-Projekt eines Google-Mitarbeiters und wird von einigen Google-Apps verwendet. Im letzten Jahr wurde es auf der Google I/Wurde auf Android O empfohlen, aber es gibt im Inland nicht viele Informationen.

Fresco ist eine von Facebook im ersten Halbjahr dieses Jahres freigegebene Bildcache, die folgenden Hauptmerkmale umfasst:
(1Zwei Speichercaches plus Native Cache bilden eine dreistufige Cache

(2Unterstützt Stream, kann ähnlich wie auf Webseiten Bilder in einem verschwommenen, schrittweisen Prozess anzeigen

(3Bessere Unterstützung für Mehr-Frames-Animation-Bilder, wie Gif, WebP

Da Fresco noch nicht offiziell veröffentlicht wurde 1Version 0, und ich habe nicht viel Zeit gehabt, mich mit dem Quellcode von Fresco vertraut zu machen. Der Vergleich umfasst daher nicht Fresco, der in Zukunft hinzugefügt werden wird, wenn ich Zeit habe.

Weitere Bildcaches sind unter: Android Bildcaches zu finden

Zwei: Grundlegende Konzepte

Bevor wir die offiziellen Vergleiche durchführen, sollten wir uns einige allgemeine Konzepte der Bildcaches ansehen:
(1RequestManager: Modul zur Generierung und Verwaltung von Anfragen

(2Engine: Der Engine-Teil, verantwortlich für die Erstellung von Aufgaben (Datenabrufoptionen) und die Planung der Ausführung.

(3GetDataInterface: Datenabrufoberfläche, verantwortlich für die Datenabrufoptionen von verschiedenen Datenquellen.
Zum Beispiel MemoryCache, der Daten aus dem Speichercache abruft, DiskCache, der Daten aus dem lokalen Cache abruft, und Downloader, der Daten aus dem Netzwerk abruft, etc.

(4Displayer: Ressourcen-(Bilder-)Anzeigegerät, das zum Anzeigen oder Verarbeiten von Ressourcen verwendet wird.
Zum Beispiel ImageView, diese Bildcaches unterstützen nicht nur ImageView, sondern auch andere Views sowie das Konzept eines virtuellen Displayers.

(5) Processor-Ressourcen (Bilder) Processor
Verantwortlich für die Verarbeitung von Ressourcen, wie z.B. Drehen, Komprimieren, Zuschneiden und so weiter.

Die Bezeichnungen für diese Konzepte können in verschiedenen Bildcaches unterschiedlich sein, zum Beispiel wird Displayer in ImageLoader als ImageAware bezeichnet, in Picasso und Glide als Target.

Drei. Gemeinsame Vorteile

1. Einfach zu verwenden
Alle können durch einen einzigen Code-Befehl die Bildabfrage und das Anzeigen realisieren.

2. Hohe Konfigurierbarkeit und Anpassungsfähigkeit
Der Bildcachegrabber (Wiederholungsmechanismus), der Decoder, der Display, der Processor, der Speichercache, der lokale Cache, der Threadpool und die Cachekonfiguration sind leicht konfigurierbar.

Hohe Anpassungsfähigkeit, die Cache-Konfiguration gemäß der Systemleistung initialisiert und die Strategie dynamisch anpasst, wenn die Systeminformationen geändert werden.
Zum Beispiel wird die maximale Anzahl der gleichzeitigen Verbindungen gemäß der Anzahl der CPU-Kerne bestimmt, die Größe des Speichercaches gemäß der verfügbaren Speicherkapazität bestimmt und die maximale Anzahl der gleichzeitigen Verbindungen bei Änderungen des Netzwerkstatus angepasst.

3. Mehrstufige Cache
haben mindestens zwei Ebenen Cache, um die Geschwindigkeit des Bildladens zu erhöhen. 

4. Unterstützung mehrerer Datenquellen
. Unterstützung mehrerer Datenquellen, einschließlich Netzwerk, lokal, Ressourcen, Assets und so weiter

5. Unterstützung mehrerer Displayer
Nicht nur ImageView wird unterstützt, sondern auch andere Views sowie das Konzept eines virtuellen Displayers.

Andere kleine Gemeinsamkeiten umfassen die Unterstützung von Animationen, die Unterstützung von Transformationsverarbeitung und die Erteilung von EXIF-Informationen.

Vier. ImageLoader-Design und Vorteile

1. Gesamtdesign und Prozess

Dies ist die Übersicht über das Gesamtdesign von ImageLoader. Die gesamte Bibliothek ist in die fünf Hauptmodule ImageLoaderEngine, Cache und ImageDownloader, ImageDecoder, BitmapDisplayer und BitmapProcessor unterteilt, wobei Cache in MemoryCache und DiskCache unterteilt ist.

Einfach gesagt ist dies der Prozess, bei dem ImageLoader die Aufgabe erhält, Bilder zu laden und anzuzeigen, und diese an ImageLoaderEngine weitergibt. ImageLoaderEngine verteilt die Aufgabe an einen spezifischen Threadpool zur Ausführung, bei der Aufgabe werden Bilder über Cache und ImageDownloader abgerufen, möglicherweise durch BitmapProcessor und ImageDecoder verarbeitet und schließlich in Bitmap umgewandelt, um sie an BitmapDisplayer in ImageAware anzuzeigen.

2. Advantages of ImageLoader

(1Supports download progress listening

(2You can pause image loading during view scrolling
You can pause image loading during view scrolling through the PauseOnScrollListener interface.

(3Default implementation of multiple memory cache algorithms These image caches can be configured with cache algorithms, but ImageLoader defaults to implementing more cache algorithms, such as Size Maximum First Deleted, Least Recently Used, First In First Out, Time Longest First Deleted, and so on.

(4Supports defining the naming rules of local cache files

Chapter 5: Picasso Design and Advantages

1. Gesamtdesign und Prozess

The above is the overall design diagram of Picasso. The entire library is divided into modules such as Dispatcher, RequestHandler, and Downloader, PicassoDrawable, etc.

Dispatcher is responsible for distributing and processing actions, including submission, pause, continue, cancel, network status change, retry, and so on.

In simple terms, Picasso receives the task of loading and displaying images, creates a Request and hands it over to the Dispatcher, the Dispatcher distributes the task to the specific RequestHandler, the task gets the image through MemoryCache and Handler (data acquisition interface), and after the image is successfully obtained, it is displayed in the Target through PicassoDrawable.

It should be noted that the File system part of Data above, Picasso does not have an interface for customizing local caching, and defaults to using the local cache of http, API 9 Above uses okhttp, below uses Urlconnection, so if you need to customize local caching, you need to redefine Downloader.

2. Advantages of Picasso

(1Built-in statistical monitoring function
Supports monitoring of image cache usage, including cache hit rate, memory size used, traffic saved, and so on.

(2) unterstützt Prioritätsverarbeitung
Before each task scheduling, a task with a higher priority will be selected, for example, when the priority of the Banner on the App page is higher than that of the Icon, it is very applicable.

(3Supports loading after the image size calculation is completed.

(4Support flight mode, the number of concurrent threads varies according to the network type.
Wenn das Telefon in den Flugmodus wechselt oder der Netzwerktyp wechselt, passt es automatisch die maximale Anzahl der Threads im Thread-Pool an, z.B. bei wifi ist die maximale Anzahl der parallelen Verbindungen 4, 4g für 3,3g für 2.
Hier bestimmt Picasso die maximale Anzahl der parallelen Verbindungen basierend auf dem Netzwerktyp und nicht auf der Anzahl der CPU-Kerne. 

(5) "keine" lokale Cache
Es gibt keine "lokale Cache", was nicht bedeutet, dass es keine lokale Cache gibt, sondern dass Picasso selbst dies nicht implementiert hat und es der anderen Netzwerkbibliothek von Square, okhttp, überlassen hat, was den Vorteil hat, dass es durch den Cache im Response Header der Anfrage genutzt werden kann-Control und Expired kontrollieren die Ablaufzeit von Bildern.

Sechster Abschnitt: Design und Vorteile von Glide

1. Gesamtdesign und Prozess

Das obige Diagramm zeigt die Gesamtdesign von Glide. Die gesamte Bibliothek ist in Module unterteilt: RequestManager (Anfrage-Manager), Engine (Datenbeschaffungs-Engine), Fetcher (Datenbeschaffungs-Modul), MemoryCache (Speicher-Cache), DiskLRUCache, Transformation (Bildverarbeitung), Encoder (lokaler Cache-Speicher), Registry (Bildtyp und Parser-Konfiguration), Target (Ziel) und andere.

Kurz gesagt, Glide erhält Aufgaben zur Ladung und Anzeige von Ressourcen, erstellt einen Request und übergibt ihn an den RequestManager, der den Engine startet, um Ressourcen aus den Datenquellen zu erhalten (durch Fetcher), und nach der Verarbeitung durch Transformation an das Ziel übergibt.

Glide ist auf Open-Source-Bibliotheken wie DiskLRUCache, GifDecoder angewiesen, um lokale Caches und die Decodierung von Gif-Bildern durchzuführen.

2. Vorteile von Glide

(1) Bild-Cache-> Medien-Cache
Glide ist nicht nur ein Bild-Cache, es unterstützt Gif, WebP, Thumbnails. Sogar Video, daher sollte es eher als Medien-Cache betrachtet werden. 

(2) unterstützt Prioritätsverarbeitung

(3) mit Activity/Der Lebenszyklus von Fragment ist konsistent und unterstützt trimMemory
Glide behält für jeden Context einen RequestManager bei, der durch FragmentTransaction mit Activity verbunden bleibt/Das Lebenszyklus von Fragment ist konsistent und es gibt eine entsprechende trimMemory-Schnittstelle, die aufgerufen werden kann.

(4) unterstützt okhttp, Volley
Glide holt standardmäßig Daten über UrlConnection ab und kann mit okhttp oder Volley verwendet werden. Tatsächlich unterstützen auch ImageLoader und Picasso okhttp und Volley.

(5) Speicherfreundlich
① Glide hat einen aktiven Design im Speicher-Cache
Beim Abrufen von Daten aus dem Speicher-Cache wird nicht wie bei der allgemeinen Implementierung mit get verwendet, sondern mit remove, und diese Cache-Daten werden in eine Map mit weichen Referenzen als Wert platziert, und die Anzahl der Referenzen wird gezählt. Nachdem das Bild geladen wurde, wird beurteilt, ob die Anzahl der Referenzen leer ist, und wenn ja, wird der Cache freigegeben.

② Der Speicher-Cache ist kleinerer Bild
Glide verwendet URL, view_width, view_height, die Auflösung des Bildschirms und andere als gemeinsamen Schlüssel, um die verarbeiteten Bilder im Speicher-Cache zu speichern, anstatt die Originalbilder, um die Größe zu sparen

③ Mit Activity/Der Lebenszyklus von Fragment ist konsistent und unterstützt trimMemory

④ Die Bilder verwenden standardmäßig den Standard RGB_565 statt ARGB_888
Obwohl die Klarheit etwas geringer ist, sind die Bilder kleiner und können auch in ARGB_ konfiguriert werden888.

Andere: Glide unterstützt das Ablaufdatum von URLs über signature oder ohne lokale Cache-Verwendung

Sieben, Zusammenfassung


Insgesamt gesagt, die Funktionen und die Länge der Proxy von ImageLoader sind einfach und durchschnittlich zu verstehen. 

Der Picasso-Code ist obwohl nur in einem Paket, ohne strenge Paketunterscheidung, einfach und die Logik ist klar. Man kann innerhalb von ein paar Stunden einen tiefen Einblick gewinnen.

Glide ist leistungsstark, aber der Code ist umfangreich und der Fluss ist komplex. Es wird nur empfohlen, es zu verwenden, wenn man eine tiefere Kenntnis hat, um nicht in Schwierigkeiten zu geraten, wenn Probleme auftreten.

Das war der Inhalt dieses Artikels. Ich hoffe, er hat Ihnen bei Ihrem Lernen geholfen und ich hoffe, dass Sie die呐喊教程 unterstützen.

Erklärung: Der Inhalt dieses Artikels wurde aus dem Internet übernommen und gehört dem Urheber. Der Inhalt wurde von Internetnutzern freiwillig beigesteuert und hochgeladen. Diese Website besitzt keine Eigentumsrechte und hat den Inhalt nicht manuell bearbeitet. Sie übernimmt auch keine Haftung für rechtliche Fragen. Wenn Sie urheberrechtlich geschützte Inhalte entdecken, freuen wir uns über eine E-Mail an: notice#oldtoolbag.com (Bitte ersetzen Sie # durch @, wenn Sie eine Beschwerde einreichen, und fügen Sie relevante Beweise bei. Bei nachgewiesener Urheberrechtsverletzung wird diese Seite sofort die fraglichen Inhalte löschen.)

Gefällt mir