Glide — Google tərəfindən Bumptech layihəsi vasitəsilə dəstəklənən Android-də şəkillərin yüklənməsi üçün kitabxanadır. Kitabxana avtomatik yaddaş idarəetməsi ilə şəkillərin, GIF animasiyalarının və video kadrlarının səmərəli yüklənməsini təmin edir. Glide GitHub deposunun məlumatlarına görə, layihə 200 000-dən çox tətbiq tərəfindən istifadə olunur. Glide Google tərəfindən Android-də qrafik yükləmə üçün üstünlük verilən kitabxana kimi tövsiyə edilir.
Əsas məqamlar
Glide — Android tətbiqlərində şəkillərin, animasiyalı GIF-lərin və video kadrlarının sürətli və səmərəli yüklənməsi üçün kitabxanadır. Layihə Bumptech tərəfindən Google himayəsi altında hazırlanır və Google-un rəsmi tətbiqlərində geniş istifadə olunur.
Glide-in daxili arxitekturası komponent yanaşmasına əsaslanır: Engine sorğuların icrasını idarə edir, DecodeJob dekodlaşdırmaya cavabdehdir, ResourceDecoder isə xam məlumatları Bitmap və ya Drawable-a çevirir. Hər mərhələ modullar və reyestrlər vasitəsilə fərdiləşdirilə bilər ki, bu da Glide-i qeyri-standart şəkil formatları üçün son dərəcə çevik kitabxana edir.
Bir çox rəqiblərindən fərqli olaraq, Glide əvvəldən Android-in xüsusiyyətləri nəzərə alınmaqla layihələndirilmişdir: Activity və Fragment-in həyat dövrü, ekran dönmələri, konfiqurasiya dəyişiklikləri. Kitabxana komponentin vəziyyətindən asılı olaraq yükləmələri avtomatik dayandırır və bərpa edir.
Android Developers məlumatlarına görə, Glide Google-un rəsmi sənədlərində şəkillərin yüklənməsi üçün tövsiyə olunan kitabxanadır. O, Google Play, Google Maps və şirkətin digər məhsullarında istifadə olunur ki, bu da onun etibarlılığını və məhsuldarlığını təsdiqləyir.
Glide-in analoqlardan əsas fərqi — şəkillərin ImageView ölçüsünə avtomatik miqyaslanmasıdır. Picasso şəkli tam rezolyusiyada yükləyir və sonra miqyaslayırsa, Glide faylı dərhal lazımi ölçüdə dekodlaşdırır. Bu, pik yaddaş istehlakını azaldır və müxtəlif hüceyrə ölçüləri olan siyahılarda göstərilməni sürətləndirir.
Glide həm sadə, həm də mürəkkəb məzmun yükləmə ssenarilərini əhatə edən geniş funksiyalar dəsti təqdim edir.
GIF və animasiyalı WebP Glide tərəfindən statik şəkillər qədər sadə yüklənir və göstərilir. Kitabxana MIME tipinə görə formatı avtomatik müəyyən edir və animasiyanı deşifrə edərək kadrları fon axınında göstərir. Oxudulmasını idarə etmək üçün asGif və asBitmap metodları mövcuddur.
Glide avtomatik olaraq Activity, Fragment və View-in həyat dövrünə bağlanır. Activity dayandırıldıqda yükləmələr dayandırılır, məhv edildikdə isə ləğv edilir. Bu, yaddaş sızmalarının və artıq bağlanmış ekranlar üçün şəkillərin yüklənməsinin qarşısını alır. İnteqrasiya LifecycleOwner dəstəyi vasitəsilə işləyir.
Glide URL və ya yerli yol ilə videodan kadrları çıxara bilər. Bunun üçün asBitmap() metodu video URI üçün load() ilə birlikdə istifadə olunur. Glide avtomatik olaraq əsas kadrı və ya müəyyən edilmiş vaxt işarəsinə görə kadrı seçir. Bu, video önizləmələrini göstərmək üçün faydalıdır.
GlideApp — AppGlideModule konfiqurasiyası əsasında genişləndirilmiş API təmin edən yaradılmış sinifdir. Onun köməyi ilə standart Glide.with-də mövcud olmayan metodlardan istifadə etmək olar: fərdi standart seçimlərlə yükləmə, kitabxanalarla inteqrasiya və əvvəlcədən təyin edilmiş transformasiyalar. Generasiya üçün AppGlideModule-dən miras alan sinifdə @GlideModule annotasiyası tələb olunur.
Glide mühərrik, dekoderlər, transformasiyalar və keş ilə çoxsəviyyəli arxitekturadan istifadə edir. Hər sorğu müəyyən ImageView üçün yükləməni optimallaşdıran işləyicilər zəncirindən keçir.
into(view) çağırıldıqda Glide keşi yoxlayır: aktiv resurslar, RAM keşi, disk keşi və yalnız sonra şəbəkə. Şəkil avtomatik olaraq hədəf ImageView ölçüsünə, ekran sıxlığına və scaleType-a uyğun miqyaslanır. Bu, yaddaş istifadəsini azaldır — Glide-in əsas üstünlüyü.
Glide.with(context)
.load("https://example.com/image.jpg")
.placeholder(R.drawable.loading)
.error(R.drawable.error)
.override(400, 300)
.centerCrop()
.into(imageView)
Quraşdırma Glide Gradle vasitəsilə həyata keçirilir. Kitabxana API generasiyası üçün AppGlideModule vasitəsilə konfiqurasiya tələb edir. Minimum Android API versiyası — 21.
build.gradle-də GlideAPI generasiyası üçün kapt annotasiya işləyicisi ilə Glide əlavə edin. Kotlin üçün annotationProcessor əvəzinə kapt istifadə edin. Glide 4.16+ versiyası Android Gradle Plugin 8.x ilə sabit işləyir.
dependencies {
implementation "com.github.bumptech.glide:glide:4.16.0"
annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}
// Kotlin üçün kapt istifadə edin
// kapt "com.github.bumptech.glide:compiler:4.16.0"
AppGlideModule — Glide-in konfiqurasiyası üçün məcburi komponentdir. O, keş ölçüsünü, fərdi HttpStack-i təyin etməyə və öz dekoderlərinizi qeydiyyatdan keçirməyə imkan verir. Modul tətbiq işə salındıqda Glide tərəfindən skan edilir. @GlideModule annotasiyası onu avtomatik qeydiyyatdan keçirir.
@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)
);
}
}
Nümunələr aşağıda tipik ssenariləri göstərir: şəkil yükləmə, GIF ilə iş və video kadrın çıxarılması.
Glide.with().load().into() vasitəsilə əsas yükləmə — şəbəkədən şəkil göstərmək üçün minimal kod. Glide avtomatik olaraq ImageView ölçüsünü uyğunlaşdırır. Placeholder yükləmə zamanı, error isə xəta zamanı göstərilir.
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 statik şəkil kimi yüklənir — Glide formatı məzmun növünə görə avtomatik müəyyən edir. Statik şəkil kimi məcburi yükləmə üçün asBitmap(), GIF üçün asGif() istifadə edin. Glide yalnız görünən kadrları səmərəli şəkildə dekodlaşdırır.
Glide.with(context)
.asGif()
.load("https://example.com/animation.gif")
.into(imageView)
// GIF-in ilk kadrını statik şəkil kimi yüklə
Glide.with(context)
.asBitmap()
.load("https://example.com/animation.gif")
.into(imageView)
Video kadr Glide tərəfindən yerli və ya uzaq videonun URI-sinə görə çıxarılır. Standart olaraq Glide əsas kadrı yükləyir. Müəyyən vaxt işarəsini göstərmək üçün frameMillis istifadə olunur. Bu, video qalereyasında önizləmə göstərmək üçün əlverişlidir.
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
Optimallaşdırma Glide-in RecyclerView üçün optimallaşdırılması — çox sayda şəkli olan tətbiqlər hazırlanarkən kritik bacarıqdır. Düzgün konfiqurasiya ləngimələrin və OOM xətalarının qarşısını alır.
Glide-in əsas imkanlarından biri — RecyclerViewPreloader vasitəsilə RecyclerView ilə inteqrasiyadır. Bu komponent sürüşdürmə sürətini və istiqamətini təhlil edərək bir neçə element sonra ekranda görünəcək şəkilləri əvvəlcədən yükləyir. Preloader ilə işləmək üçün PreloadSizeProvider interfeysini tətbiq etmək və onu hədəf ImageView ilə birlikdə konstruktora ötürmək lazımdır.
override() metodunun dəqiq ImageView ölçüləri ilə istifadəsi yükləməni əhəmiyyətli dərəcədə sürətləndirir. Glide hədəfin dəqiq ölçüsünü bildikdə, şəkli dərhal lazımi rezolyusiyada dekodlaşdıra bilər, miqyaslama mərhələsini atlayaraq. Bu, dekodlaşdırma vaxtını qısaldır və pik yaddaş istehlakını 30-40% azaldır.
Müxtəlif məzmunlu lentlər üçün hər element növü üçün müxtəlif RequestOptions istifadə edin. Məsələn, böyük banner şəkilləri üçün override(1200, 600) və RGB_565 keyfiyyəti, avatar üçün isə override(200, 200) və transform vasitəsilə yuvarlaqlaşdırma təyin edilə bilər. Belə yanaşma hər məzmun növü üçün resurslardan optimal istifadə etməyə imkan verir.
Glide error-şəkilləri və fərdi RequestListener vasitəsilə xətaların işlənməsi üçün çevik imkanlar təqdim edir. RequestListener uğurlu yükləməyə və ya xətaya reaksiya verməyə, nasazlıqları qeyd etməyə və ya analitika göndərməyə imkan verir. Həmçinin fallback — load() link əvəzinə null aldıqda göstərilən şəkli konfiqurasiya etmək olar.
İstifadəçi onlara sürüşdürmədən əvvəl şəkilləri əvvəlcədən yükləmək üçün RecyclerViewPreloader istifadə edin. Glide sürüşdürmə sürətini təhlil edən və şəkilləri əvvəlcədən yükləyən preloader vasitəsilə RecyclerView ilə inteqrasiyanı dəstəkləyir.
Thumbnail multiplikasiyası əvvəlcə şəklin kiçildilmiş versiyasını göstərməyə, sonra isə tam şəkli yükləməyə imkan verir. thumbnail(0.25f) çağırışı ölçünün 25% versiyasını yükləyir, dərhal göstərilir, tam ölçülü şəkil isə sonra yüklənir. Bu, ani yükləmə hissi yaradır.
Siyahı adapterləri üçün Glide-in hər dəfə şəkli miqyaslamaması üçün .override() dəqiq ImageView ölçüləri ilə istifadə edin. Bu, CPU yükünü azaldır və yaddaş istehlakını azaldır. Keş ölçüsü eksperimental olaraq seçilir, lakin disk üçün 250 MB və mövcud yaddaşın 20%-i yaxşı başlanğıc nöqtəsidir.
Tez-tez verilən suallar
Glide GIF, video kadrları və animasiyalı WebP dəstəkləyir. O, yaddaşı daha səmərəli idarə edir və Google tərəfindən tövsiyə olunur. Picasso daha kiçik ölçülüdür və istifadəsi daha sadədir. Mürəkkəb layihələr üçün Glide seçin.
Glide LifecycleOwner (Fragment, Activity) və ya View qəbul edir. Kitabxana LifecycleObserver vasitəsilə vəziyyəti avtomatik izləyir: pauzada yükləməni dayandırır və məhv edildikdə ləğv edir, sızmaların qarşısını alır.
Bəli, load()-dan əvvəl asBitmap() istifadə edin. Glide GIF-i statik şəkil kimi yükləyəcək və yalnız ilk kadrı göstərəcək. Bu, GIF animasiyasının performansa görə arzuolunmaz olduğu siyahılar üçün faydalıdır.
Keş Glide üç səviyyədən ibarətdir: aktiv resurslar (hazırda istifadə olunan), RAM (LRU-keş) və disk (LruCache). Keşdən yüklənmiş şəkillər dərhal göstərilir. Yaddaş çatışmazlığı zamanı keş avtomatik təmizlənir.
Fərdi HTTP müştərisi AppGlideModule-də OkHttpUrlLoader vasitəsilə qeydiyyatdan keçirilir. registerComponents-i dəyişdirin və öz OkHttpClient-inizi qeydiyyatdan keçirin. Bu, interceptorlar, sertifikatlar və fərdi vaxt aşımı əlavə etməyə imkan verir.
Nəticə
Açar təslim mobil tətbiq hazırlayacağıq
IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.
Həm də oxuyun