A Glide — egy könyvtár képek betöltéséhez Androidban, amelyet a Google támogat a Bumptech projekten keresztül. A könyvtár hatékony képek, GIF-animációk és videóképkockák betöltését biztosítja automatikus memóriakezeléssel. A Glide GitHub repozitóriumának adatai szerint a projektet több mint 200 000 alkalmazás használja. A Google a Glide-ot ajánlja előnyben részesített könyvtárként grafikák betöltéséhez Androidban.
Főbb pontok
Glide — egy könyvtár képek, animált GIF-ek és videóképkockák gyors és hatékony betöltéséhez Android-alkalmazásokban. A projektet a Bumptech fejleszti a Google égisze alatt, és széles körben használják a hivatalos Google-alkalmazásokban.
A Glide belső architektúrája komponens-alapú megközelítésre épül: az Engine kezeli a kérések végrehajtását, a DecodeJob a dekódolásért felel, a ResourceDecoder pedig a nyers adatokat Bitmap vagy Drawable formátumba alakítja. Minden szakasz testreszabható modulokon és regisztereken keresztül, ami a Glide-ot rendkívül rugalmas könyvtárrá teszi nem szabványos képformátumokhoz.
Ellentétben sok versenytárssal, a Glide-ot a kezdetektől fogva az Android sajátosságainak figyelembevételével tervezték: az Activity és Fragment életciklusa, képernyőforgatások, konfigurációváltozások. A könyvtár automatikusan felfüggeszti és folytatja a betöltéseket a komponens állapotától függően.
Az Android Developers szerint a Glide az ajánlott könyvtár képek betöltéséhez a hivatalos Google dokumentációban. Használják a Google Play, Google Maps és a vállalat más termékeiben, ami megerősíti megbízhatóságát és teljesítményét.
A Glide legfőbb különbsége a versenytársakkal szemben — a képek automatikus méretezése az ImageView méretére. Míg a Picasso teljes felbontásban tölti be a képet és aztán méretezi, addig a Glide közvetlenül a szükséges méretben dekódolja a fájlt. Ez csökkenti a csúcsmemória-használatot és felgyorsítja a megjelenítést a különböző cellaméretű listákban.
Glide széles funkciókészletet biztosít a képekkel való munkához, lefedve mind az egyszerű, mind az összetett tartalom betöltési forgatókönyveket.
GIF és animált WebP fájlokat a Glide ugyanolyan egyszerűen tölt be és jeleníti meg, mint a statikus képeket. A könyvtár automatikusan felismeri a formátumot a MIME-típus alapján, és dekódolja az animációt, a képkockákat háttérszálon jelenítve meg. A lejátszás vezérléséhez az asGif és asBitmap metódusok állnak rendelkezésre.
Glide automatikusan kapcsolódik az Activity, Fragment és View életciklusához. Az Activity szüneteltetésekor a betöltések felfüggesztődnek, megsemmisítésekor megszakadnak. Ez megakadályozza a memóriaszivárgásokat és a már bezárt képernyőkhöz tartozó képek betöltését. Az integráció a LifecycleOwner támogatásán keresztül működik.
Glide képes képkockákat kinyerni videóból URL vagy helyi elérési út alapján. Ehhez az asBitmap() metódust használjuk a load()-dal kombinálva videó URI esetén. A Glide automatikusan kiválasztja a kulcskockát vagy a megadott időbélyeg szerinti kockát. Ez hasznos a videó előnézetének megjelenítéséhez.
GlideApp — egy generált osztály, amely kibővített API-t biztosít az AppGlideModule konfigurációja alapján. Segítségével olyan metódusok használhatók, amelyek a szabványos Glide.with-ben nem érhetők el: betöltés egyéni alapértelmezett opciókkal, integráció könyvtárakkal és előre beállított transzformációk. A generáláshoz @GlideModule annotáció szükséges az AppGlideModule-t öröklő osztályban.
Glide többrétegű architektúrát használ motorral, dekóderekkel, transzformációkkal és gyorsítótárral. Minden kérés egy olyan kezelőláncon halad keresztül, amely optimalizálja a betöltést egy adott ImageView-hoz.
Az into(view) meghívásakor a Glide ellenőrzi a gyorsítótárat: aktív erőforrások, RAM-gyorsítótár, lemezgyorsítótár és csak azután a hálózat. A kép automatikusan a cél ImageView méretére skálázódik, figyelembe véve a képernyő sűrűségét és a scaleType-ot. Ez csökkenti a memóriahasználatot — a Glide legfőbb előnye.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
Telepítés A Glide telepítése Gradle-en keresztül történik. A könyvtár konfigurációt igényel AppGlideModule-on keresztül az API generálásához. Minimális Android API verzió — 21.
A build.gradle-ben adja hozzá a Glide-ot a kapt annotáció-feldolgozóval a GlideApp API generálásához. Kotlin esetén használja a kapt-ot az annotationProcessor helyett. A Glide 4.16+ verziója stabilan működik az Android Gradle Plugin 8.x-szel.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Kotlin esetén használjon kapt-ot
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule — kötelező komponens a Glide konfigurálásához. Lehetővé teszi a gyorsítótár méretének, egyéni HttpStack beállítását és saját dekóderek regisztrálását. A modult a Glide szkenneli az alkalmazás indításakor. A @GlideModule annotáció automatikusan regisztrálja.
@GlideModule
public class MyGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
int diskCacheSize = 250 * 1024 * 1024;
builder.setDiskCache(
new DiskLruCacheFactory(cacheDir.getPath(), diskCacheSize)
);
}
}
Példák alább tipikus forgatókönyveket mutatnak be: kép betöltése, munka GIF-fel és videókocka kinyerése.
Alap betöltés Glide.with().load().into() segítségével — minimális kód egy kép megjelenítéséhez a hálózatról. A Glide automatikusan igazítja az ImageView méretét. A placeholder a betöltés alatt, az error pedig hiba esetén jelenik meg.
Glide.with(fragment)
.load("https://example.com/photo.jpg")
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.into(imageView)
GIF ugyanúgy töltődik be, mint egy statikus kép — a Glide automatikusan felismeri a formátumot a tartalom típusa alapján. Kényszerített statikus képként való betöltéshez használja az asBitmap()-et, GIF-hez az asGif()-et. A Glide csak a látható képkockákat dekódolja hatékonyan.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Töltse be a GIF első képkockáját statikus képként
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Videókockát a Glide helyi vagy távoli videó URI-ja alapján nyer ki. Alapértelmezés szerint a Glide a kulcskockát tölti be. Egy adott időbélyeg megadásához a frameMillis használható. Ez kényelmes a videógaléria előnézetének megjelenítéséhez.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
Optimalizálás A Glide optimalizálása RecyclerView-hoz — kritikus készség sok képet tartalmazó alkalmazások fejlesztésekor. A helyes konfiguráció megakadályozza a lassulásokat és az OOM-hibákat.
A Glide egyik legfőbb képessége — integráció a RecyclerView-val a RecyclerViewPreloader segítségével. Ez a komponens elemzi a görgetési sebességet és irányt, előre betöltve azokat a képeket, amelyek néhány elemmel később jelennek meg a képernyőn. A preloaderrel való munkához implementálni kell a PreloadSizeProvider interfészt, és át kell adni a konstruktornak a cél ImageView-val együtt.
Az override() metódus használata pontos ImageView-méretekkel jelentősen felgyorsítja a betöltést. Amikor a Glide ismeri a cél pontos méretét, közvetlenül a szükséges felbontásban dekódolhatja a képet, kihagyva a méretezési szakaszt. Ez lerövidíti a dekódolási időt és 30–40%-kal csökkenti a csúcsmemória-használatot.
Heterogén tartalmú hírfolyamokhoz használjon különböző RequestOptions-okat az egyes elemtípusokhoz. Például nagy banner képekhez beállítható override(1200, 600) és RGB_565 minőség, míg avatárokhoz override(200, 200) és lekerekítés transform segítségével. Ez a megközelítés lehetővé teszi az erőforrások optimális kihasználását minden tartalomtípushoz.
Glide rugalmas lehetőségeket biztosít a hibák kezelésére error-képeken és egyéni RequestListener-en keresztül. A RequestListener lehetővé teszi a sikeres betöltésre vagy hibára való reagálást, a hibák naplózását vagy analitika küldését. Beállítható fallback is — egy kép, amely akkor jelenik meg, ha a load() null-t kap link helyett.
Használja a RecyclerViewPreloader-t a képek előzetes betöltéséhez, mielőtt a felhasználó odagörgetne. A Glide támogatja a RecyclerView-val való integrációt egy előtöltőn keresztül, amely elemzi a görgetési sebességet és előre betölti a képeket.
Thumbnail multiplicitás lehetővé teszi először a kép kicsinyített verziójának megjelenítését, majd a teljes kép betöltését. A thumbnail(0.25f) hívás a méret 25%-os verzióját tölti be, amely azonnal megjelenik, míg a teljes méretű kép később töltődik be. Ez azonnali betöltés érzetét kelti.
Lista adapterekhez használja a .override()-et pontos ImageView-méretekkel, hogy a Glide ne méretezze át a képet minden alkalommal. Ez csökkenti a CPU-terhelést és a memóriahasználatot. A gyorsítótár mérete kísérletileg határozható meg, de a 250 MB lemezre és a rendelkezésre álló memória 20%-a jó kiindulópont.
Gyakran ismételt kérdések
Glide támogatja a GIF-et, videókockákat és animált WebP-t. Hatékonyabban kezeli a memóriát, és a Google ajánlja. A Picasso kisebb és egyszerűbben használható. Összetett projektekhez válassza a Glide-ot.
Glide elfogadja a LifecycleOwner-t (Fragment, Activity) vagy View-t. A könyvtár automatikusan követi az állapotot a LifecycleObserver segítségével: felfüggeszti a betöltést szünetnél és megszakítja megsemmisítésnél, megakadályozva a szivárgásokat.
Igen, használja az asBitmap()-et a load() előtt. A Glide betölti a GIF-et statikus képként, és csak az első képkockát jeleníti meg. Ez hasznos olyan listákhoz, ahol a GIF-animáció a teljesítmény miatt nem kívánatos.
A gyorsítótár három szintből áll: aktív erőforrások (jelenleg használtak), RAM (LRU-gyorsítótár) és lemez (LruCache). A gyorsítótárból betöltött képek azonnal megjelennek. A gyorsítótár automatikusan törlődik memóriahiány esetén.
Egyéni HTTP-kliens az OkHttpUrlLoader-en keresztül regisztrálható az AppGlideModule-ban. Írja felül a registerComponents-ot, és regisztrálja saját OkHttpClient-jét. Ez lehetővé teszi elfogók, tanúsítványok és egyéni időtúllépések hozzáadását.
Összegzés
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is