Glide — је библиотека за учитавање слика у Android-у, коју подржава Google кроз пројекат Bumptech. Библиотека обезбеђује ефикасно учитавање слика, GIF анимација и видео-оквира са аутоматским управљањем меморијом. Према подацима GitHub репозиторијума Glide, пројекат користи преко 200 000 апликација. Google препоручује Glide као пожељну библиотеку за учитавање графике у Android-у.
Главно
Glide — је библиотека за брзо и ефикасно учитавање слика, анимираних GIF-ова и видео-оквира у Android апликацијама. Пројекат развија Bumptech под окриљем Google-а и широко се користи у званичним Google апликацијама.
Унутрашња архитектура Glide-а заснована је на компонентном приступу: Engine управља извршавањем захтева, DecodeJob је одговоран за декодирање, а ResourceDecoder претвара сирове податке у Bitmap или Drawable. Свака фаза се може прилагодити кроз модуле и регистре, што чини Glide изузетно флексибилном библиотеком за нестандардне формате слика.
За разлику од многих конкурената, Glide је од самог почетка пројектован узимајући у обзир специфичности Android-а: животни циклус Activity-ја и Fragment-а, ротације екрана, промене конфигурације. Библиотека аутоматски зауставља и наставља учитавања у зависности од стања компоненте.
Према Android Developers, Glide је препоручена библиотека за учитавање слика у званичној документацији Google-а. Користи се у апликацијама Google Play, Google Maps и другим производима компаније, што потврђује њену поузданост и перформансе.
Кључна разлика Glide-а од аналога — аутоматско скалирање слика на величину ImageView-а. Ако Picasso учитава слику у пуној резолуцији и затим је скалира, Glide декодира фајл одмах у потребној величини. Ово смањује вршно коришћење меморије и убрзава приказ у листама са различитим величинама ћелија.
Glide пружа широк скуп функција за рад са сликама, покривајући како једноставне, тако и сложене сценарије учитавања садржаја.
GIF и анимиране WebP Glide учитава и приказује једноставно као статичне слике. Библиотека аутоматски одређује формат по MIME типу и декодира анимацију, приказујући оквире у позадинској нити. За управљање репродукцијом доступне су методе asGif и asBitmap.
Glide се аутоматски везује за животни циклус Activity-ја, Fragment-а и View-а. При паузи Activity-ја учитавања се заустављају, при уништењу — отказују. Ово спречава цурење меморије и учитавање слика за већ затворене екране. Интеграција ради кроз подршку за LifecycleOwner.
Glide може да издваја оквире из видеа по URL-у или локалној путањи. За то се користи метода asBitmap() у комбинацији са load() за видео URI. Glide аутоматски бира кључни оквир или оквир по одређеној временској ознаци. Ово је корисно за приказ прегледа видеа.
GlideApp — је генерисана класа која пружа проширени API на основу конфигурације AppGlideModule-а. Помоћу њега се могу користити методе недоступне у стандардном Glide.with: учитавање са прилагођеним подразумеваним опцијама, интеграција са библиотекама и унапред подешене трансформације. За генерисање је потребна анотација @GlideModule у класи која наслеђује AppGlideModule.
Glide користи вишеслојну архитектуру са мотором, декодерима, трансформацијама и кешом. Сваки захтев пролази кроз ланац обрађивача који оптимизују учитавање за одређени ImageView.
При позиву into(view) Glide проверава кеш: активне ресурсе, кеш у RAM меморији, диск кеш и тек онда мрежу. Слика се аутоматски скалира на величину циљаног ImageView-а узимајући у обзир густину екрана и scaleType. Ово смањује коришћење меморије — кључна предност Glide-а.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
Инсталација Glide-а се врши преко Gradle-а. Библиотека захтева конфигурацију кроз AppGlideModule за генерисање API-ја. Минимална верзија Android API — 21.
У build.gradle додајте Glide са kapt обрађивачем анотација за генерисање GlideApp API-ја. За Kotlin користите kapt уместо annotationProcessor-а. Верзија Glide 4.16+ стабилно ради са Android Gradle Plugin 8.x.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// За Kotlin користите kapt
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule — обавезна компонента за подешавање Glide-а. Омогућава постављање величине кеша, прилагођеног HttpStack-а и регистровање сопствених декодера. Модул скенира Glide при покретању апликације. Анотација @GlideModule га аутоматски региструје.
@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)
);
}
}
Примери испод приказују типичне сценарије: учитавање слике, рад са GIF-ом и издвајање видео-оквира.
Основно учитавање преко Glide.with().load().into() — минимални код за приказ слике из мреже. Glide аутоматски подешава величину ImageView-а. Placeholder се приказује током учитавања, а error — при грешци.
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 се учитава исто као статична слика — Glide аутоматски одређује формат по типу садржаја. За принудно учитавање као статичне слике користите asBitmap(), за GIF — asGif(). Glide ефикасно декодира само видљиве оквире.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// Учитај први оквир GIF-а као статичну слику
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Видео-оквир Glide издваја по URI-ју локалног или удаљеног видеа. Подразумевано, Glide учитава кључни оквир. За одређивање конкретне временске ознаке користи се frameMillis. Ово је згодно за приказ прегледа у галерији видеа.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
Оптимизација Glide-а за RecyclerView — критична вештина при развоју апликација са великим бројем слика. Правилно подешавање спречава застоје и OOM грешке.
Једна од кључних могућности Glide-а — интеграција са RecyclerView-ом преко RecyclerViewPreloader-а. Ова компонента анализира брзину скроловања и правац кретања, претходно учитавајући слике које ће се појавити на екрану за неколико елемената. За рад са претходним учитавачем потребно је имплементирати интерфејс PreloadSizeProvider и проследити га у конструктор заједно са циљаним ImageView-ом.
Коришћење методе override() са тачним димензијама ImageView-а значајно убрзава учитавање. Када Glide зна тачну величину циља, може да декодира слику одмах у потребној резолуцији, прескачући фазу скалирања. Ово скраћује време декодирања и смањује вршно коришћење меморије за 30–40%.
За листе са разноврсним садржајем користите различите RequestOptions за сваки тип елемената. На пример, за велике банер слике можете поставити override(1200, 600) и квалитет RGB_565, а за аватаре — override(200, 200) и заокруживање кроз transform. Такав приступ омогућава оптимално коришћење ресурса за сваки тип садржаја.
Glide пружа флексибилне могућности за обраду грешака кроз error слике и прилагођени RequestListener. RequestListener омогућава реаговање на успешно учитавање или грешку, евидентирање отказа или слање аналитике. Може се подесити и fallback — слика која се приказује када load() прими null уместо линка.
Користите RecyclerViewPreloader за претходно учитавање слика пре него што корисник скролује до њих. Glide подржава интеграцију са RecyclerView-ом кроз претходни учитавач који анализира брзину скроловања и учитава слике унапред.
Thumbnail мултипликација омогућава да прво прикажете умањену верзију слике, а затим учитате пуну. Позив thumbnail(0.25f) учитава верзију од 25% величине, која се приказује одмах, а слика пуне величине се учитава касније. Ово ствара осећај тренутног учитавања.
За лист-адаптере користите .override() са тачним димензијама ImageView-а како Glide не би скалирао слику сваки пут. Ово смањује оптерећење CPU-а и потрошњу меморије. Величина кеша се бира експериментално, али 250 MB за диск и 20% доступне меморије су добар почетни оквир.
Често постављана питања
Glide подржава GIF, видео-оквире и анимиране WebP. Ефикасније управља меморијом и препоручује га Google. Picasso је мањи и једноставнији за употребу. За сложене пројекте бирајте Glide.
Glide прихвата LifecycleOwner (Fragment, Activity) или View. Библиотека аутоматски прати стање кроз LifecycleObserver: зауставља учитавање при паузи и отказује при уништењу, спречавајући цурења.
Да, користите asBitmap() пре load(). Glide ће учитати GIF као статичну слику и приказати само први оквир. Ово је корисно за листе где је анимација GIF-а непожељна због перформанси.
Кеш Glide-а се састоји од три нивоа: активни ресурси (тренутно коришћени), RAM меморија (LRU кеш) и диск (LruCache). Слике учитане из кеша приказују се тренутно. Кеш се аутоматски чисти при недовољно меморије.
Прилагођени HTTP клијент се региструје кроз OkHttpUrlLoader у AppGlideModule-у. Препишите registerComponents и региструјте свој OkHttpClient. Ово омогућава додавање пресретача, сертификата и прилагођених времена чекања.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође