Glide: nó là gì, thư viện hình ảnh và ứng dụng trong Android

Tác giả: IT Sectr Đã đăng: 2026-05-05 Thời gian đọc: 8 phút

Glide là một thư viện tải hình ảnh trong Android, được Google hỗ trợ thông qua dự án Bumptech. Thư viện cung cấp khả năng tải hình ảnh, hoạt ảnh GIF và khung hình video hiệu quả với quản lý bộ nhớ tự động. Theo kho lưu trữ Glide trên GitHub, dự án được sử dụng bởi hơn 200.000 ứng dụng. Glide được Google khuyến nghị là thư viện ưa thích để tải đồ họa trong Android.

Những điểm chính

  • Glide — thư viện tải hình ảnh của Google với hỗ trợ GIF và khung hình video
  • Bộ nhớ đệm ba cấp: bộ nhớ, đĩa và tài nguyên đang hoạt động để đạt tốc độ tối đa
  • Vòng đời — Glide tự động tạm dừng yêu cầu khi Activity bị tạm dừng
  • GIF và WebP hoạt hình được hỗ trợ sẵn mà không cần plugin bổ sung
  • Thumbnail cho phép hiển thị phiên bản thu nhỏ trước, sau đó hiển thị phiên bản đầy đủ

Glide là gì?

Glide là một thư viện để tải nhanh và hiệu quả hình ảnh, GIF hoạt hình và khung hình video trong các ứng dụng Android. Dự án được phát triển bởi Bumptech dưới sự bảo trợ của Google và được sử dụng rộng rãi trong các ứng dụng chính thức của Google.

Kiến trúc bên trong của Glide được xây dựng trên cách tiếp cận dựa trên thành phần: Engine quản lý việc thực thi yêu cầu, DecodeJob chịu trách nhiệm giải mã và ResourceDecoder chuyển đổi dữ liệu thô thành Bitmap hoặc Drawable. Mỗi giai đoạn có thể được tùy chỉnh thông qua các mô-đun và sổ đăng ký, làm cho Glide trở thành một thư viện cực kỳ linh hoạt cho các định dạng hình ảnh không chuẩn.

Không giống như nhiều đối thủ cạnh tranh, Glide được thiết kế ngay từ đầu với các đặc điểm của Android: vòng đời của Activity và Fragment, xoay màn hình, thay đổi cấu hình. Thư viện tự động tạm dừng và tiếp tục tải tùy thuộc vào trạng thái của thành phần.

Theo Android Developers, Glide là thư viện được khuyến nghị để tải hình ảnh trong tài liệu chính thức của Google. Nó được sử dụng trong Google Play, Google Maps và các sản phẩm khác của công ty, khẳng định độ tin cậy và hiệu suất của nó.

Sự khác biệt chính giữa Glide và các giải pháp thay thế là khả năng tự động điều chỉnh kích thước hình ảnh phù hợp với kích thước ImageView. Trong khi Picasso tải hình ảnh ở độ phân giải đầy đủ và sau đó điều chỉnh kích thước, Glide giải mã tệp trực tiếp ở kích thước cần thiết. Điều này giảm mức tiêu thụ bộ nhớ đỉnh điểm và tăng tốc hiển thị trong danh sách có kích thước ô khác nhau.

Các tính năng chính của Glide

Glide cung cấp một loạt các chức năng để làm việc với hình ảnh, bao gồm cả các kịch bản tải nội dung đơn giản và phức tạp.

Hỗ trợ GIF và WebP hoạt hình

GIF và WebP hoạt hình được Glide tải và hiển thị dễ dàng như hình ảnh tĩnh. Thư viện tự động phát hiện định dạng theo loại MIME và giải mã hoạt ảnh, hiển thị các khung hình trong luồng nền. Các phương thức asGif và asBitmap có sẵn để kiểm soát phát lại.

Tích hợp vòng đời

Glide tự động liên kết với vòng đời của Activity, Fragment và View. Khi một Activity bị tạm dừng, việc tải bị đình chỉ; khi bị hủy, nó bị hủy bỏ. Điều này ngăn rò rỉ bộ nhớ và tải hình ảnh cho các màn hình đã đóng. Tích hợp hoạt động thông qua hỗ trợ LifecycleOwner.

Tải khung hình video

Glide có thể trích xuất khung hình từ video qua URL hoặc đường dẫn cục bộ. Phương thức asBitmap() kết hợp với load() được sử dụng cho URI video. Glide tự động chọn khung hình chính hoặc khung hình tại một mốc thời gian được chỉ định. Điều này hữu ích để hiển thị hình thu nhỏ video.

Tạo và cấu hình GlideApp

GlideApp là một lớp được tạo ra cung cấp API mở rộng dựa trên cấu hình AppGlideModule. Nó cho phép sử dụng các phương thức không có sẵn trong Glide.with tiêu chuẩn: tải với các tùy chọn mặc định tùy chỉnh, tích hợp với thư viện và các biến đổi được cài đặt sẵn. Việc tạo yêu cầu chú thích @GlideModule trong một lớp mở rộng AppGlideModule.

Glide hoạt động như thế nào?

Glide sử dụng kiến trúc đa lớp với công cụ, bộ giải mã, biến đổi và bộ nhớ đệm. Mỗi yêu cầu đi qua một chuỗi các trình xử lý để tối ưu hóa việc tải cho một ImageView cụ thể.

Kiến trúc và quy trình

Khi into(view) được gọi, Glide kiểm tra bộ nhớ đệm: tài nguyên đang hoạt động, bộ nhớ đệm, bộ nhớ đệm đĩa và chỉ sau đó là mạng. Hình ảnh tự động được điều chỉnh kích thước phù hợp với kích thước ImageView mục tiêu, có tính đến mật độ màn hình và scaleType. Điều này giảm mức sử dụng bộ nhớ — một lợi thế chính của Glide.

java
Glide.with(context)
    .load("https://example.com/image.jpg")
    .placeholder(R.drawable.loading)
    .error(R.drawable.error)
    .override(400, 300)
    .centerCrop()
    .into(imageView)

Cài đặt và cấu hình Glide

Cài đặt Glide được thực hiện qua Gradle. Thư viện yêu cầu cấu hình thông qua AppGlideModule để tạo API. Phiên bản API Android tối thiểu là 21.

Thêm phụ thuộc

Trong build.gradle, thêm Glide với trình xử lý chú thích kapt để tạo API GlideApp. Đối với Kotlin, sử dụng kapt thay vì annotationProcessor. Glide phiên bản 4.16+ hoạt động ổn định với Android Gradle Plugin 8.x.

groovy
dependencies {
    implementation "com.github.bumptech.glide:glide:4.16.0"
    annotationProcessor "com.github.bumptech.glide:compiler:4.16.0"
}

// Sử dụng kapt cho Kotlin
// kapt "com.github.bumptech.glide:compiler:4.16.0"

Tạo AppGlideModule

AppGlideModule là một thành phần bắt buộc để cấu hình Glide. Nó cho phép đặt kích thước bộ nhớ đệm, HttpStack tùy chỉnh và đăng ký bộ giải mã tùy chỉnh. Mô-đun được Glide quét khi khởi động ứng dụng. Chú thích @GlideModule đăng ký nó tự động.

java
@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)
        );
    }
}

Ví dụ sử dụng Glide

Các ví dụ dưới đây minh họa các kịch bản điển hình: tải hình ảnh, làm việc với GIF và trích xuất khung hình video.

Tải hình ảnh với placeholder

Tải cơ bản qua Glide.with().load().into() — mã tối thiểu để hiển thị hình ảnh từ mạng. Glide tự động điều chỉnh kích thước ImageView. Placeholder được hiển thị trong khi tải và error khi thất bại.

java
Glide.with(fragment)
    .load("https://example.com/photo.jpg")
    .placeholder(R.drawable.placeholder)
    .error(R.drawable.error)
    .skipMemoryCache(true)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .into(imageView)

Tải hình ảnh GIF

GIF được tải giống như hình ảnh tĩnh — Glide tự động phát hiện định dạng theo loại nội dung. Để buộc tải dưới dạng hình ảnh tĩnh, sử dụng asBitmap(); cho GIF, sử dụng asGif(). Glide giải mã hiệu quả chỉ các khung hình hiển thị.

java
Glide.with(context)
    .asGif()
    .load("https://example.com/animation.gif")
    .into(imageView)

// Tải khung hình đầu tiên của GIF dưới dạng hình ảnh tĩnh
Glide.with(context)
    .asBitmap()
    .load("https://example.com/animation.gif")
    .into(imageView)

Tải khung hình video

Một khung hình video được Glide trích xuất từ URI video cục bộ hoặc từ xa. Theo mặc định, Glide tải khung hình chính. Để chỉ định một mốc thời gian cụ thể, sử dụng frameMillis. Điều này thuận tiện cho việc hiển thị hình xem trước trong thư viện video.

java
String videoUrl = "https://example.com/video.mp4";

Glide.with(context)
    .asBitmap()
    .load(videoUrl)
    .override(200, 200)
    .into(imageView)

Tối ưu hóa Glide cho danh sách lớn

Tối ưu hóa Glide cho RecyclerView là một kỹ năng quan trọng khi phát triển ứng dụng với số lượng lớn hình ảnh. Cấu hình phù hợp ngăn ngừa lag và lỗi OOM.

Một trong những tính năng chính của Glide là tích hợp RecyclerView thông qua RecyclerViewPreloader. Thành phần này phân tích tốc độ và hướng cuộn, tải trước các hình ảnh sẽ xuất hiện trên màn hình trong vài mục tiếp theo. Để sử dụng bộ tải trước, bạn cần triển khai giao diện PreloadSizeProvider và truyền nó vào hàm tạo cùng với ImageView mục tiêu.

Sử dụng phương thức override() với kích thước ImageView chính xác giúp tăng tốc đáng kể. Khi Glide biết kích thước chính xác của mục tiêu, nó có thể giải mã hình ảnh trực tiếp ở độ phân giải cần thiết, bỏ qua bước điều chỉnh kích thước. Điều này giảm thời gian giải mã và mức tiêu thụ bộ nhớ đỉnh điểm từ 30–40%.

Đối với nguồn cấp dữ liệu có nội dung không đồng nhất, hãy sử dụng RequestOptions khác nhau cho mỗi loại mục. Ví dụ, cho hình ảnh biểu ngữ lớn, bạn có thể đặt override(1200, 600) và chất lượng RGB_565, trong khi cho hình đại diện — override(200, 200) và làm tròn qua transform. Cách tiếp cận này sử dụng tài nguyên tối ưu cho mỗi loại nội dung.

Xử lý lỗi tải

Glide cung cấp các tùy chọn xử lý lỗi linh hoạt thông qua hình ảnh lỗi và RequestListener tùy chỉnh. RequestListener cho phép phản ứng với tải thành công hoặc thất bại — ghi nhật ký lỗi hoặc gửi phân tích. Bạn cũng có thể cấu hình dự phòng — một hình ảnh được hiển thị khi load() nhận được null thay vì URL.

Sử dụng RecyclerViewPreloader để tải trước hình ảnh trước khi người dùng cuộn đến chúng. Glide hỗ trợ tích hợp RecyclerView thông qua bộ tải trước phân tích tốc độ cuộn và tải hình ảnh trước.

Nhân thumbnail cho phép hiển thị phiên bản thu nhỏ của hình ảnh trước, sau đó tải phiên bản đầy đủ. Gọi thumbnail(0.25f) tải phiên bản 25% kích thước được hiển thị ngay lập tức, trong khi hình ảnh kích thước đầy đủ được tải sau. Điều này tạo cảm giác tải tức thì.

Đối với bộ điều hợp danh sách, hãy sử dụng .override() với kích thước ImageView chính xác để Glide không điều chỉnh kích thước hình ảnh mỗi lần. Điều này giảm tải CPU và mức tiêu thụ bộ nhớ. Kích thước bộ nhớ đệm được chọn theo thực nghiệm, nhưng 250 MB cho đĩa và 20% bộ nhớ khả dụng là điểm khởi đầu tốt.

Câu hỏi thường gặp

Glide khác Picasso như thế nào?

Glide hỗ trợ GIF, khung hình video và WebP hoạt hình. Nó quản lý bộ nhớ hiệu quả hơn và được Google khuyến nghị. Picasso nhỏ hơn và dễ sử dụng hơn. Đối với các dự án phức tạp, hãy chọn Glide.

Glide liên kết với vòng đời như thế nào?

Glide chấp nhận LifecycleOwner (Fragment, Activity) hoặc View. Thư viện tự động theo dõi trạng thái qua LifecycleObserver: tạm dừng tải khi tạm dừng và hủy bỏ khi hủy, ngăn rò rỉ.

Tôi có thể chỉ tải khung hình đầu tiên của GIF trong Glide không?

, sử dụng asBitmap() trước load(). Glide sẽ tải GIF như một hình ảnh tĩnh và chỉ hiển thị khung hình đầu tiên. Điều này hữu ích cho danh sách nơi hoạt ảnh GIF không mong muốn vì lý do hiệu suất.

Bộ nhớ đệm của Glide ảnh hưởng đến hiệu suất như thế nào?

Bộ nhớ đệm của Glide bao gồm ba cấp: tài nguyên đang hoạt động (đang sử dụng), bộ nhớ (bộ nhớ đệm LRU) và đĩa (LruCache). Hình ảnh được tải từ bộ nhớ đệm được hiển thị ngay lập tức. Bộ nhớ đệm tự động được xóa khi bộ nhớ thấp.

Làm thế nào để cấu hình máy khách HTTP tùy chỉnh cho Glide?

Máy khách HTTP tùy chỉnh được đăng ký qua OkHttpUrlLoader trong AppGlideModule. Ghi đè registerComponents và đăng ký OkHttpClient của bạn. Điều này cho phép thêm bộ chặn, chứng chỉ và thời gian chờ tùy chỉnh.

Tổng kết

  • Glide — thư viện tải hình ảnh của Google với hỗ trợ GIF và khung hình video
  • Bộ nhớ đệm ba cấp cung cấp truy cập tức thì vào hình ảnh được tải nhiều lần
  • Vòng đời tự động tạm dừng và hủy bỏ yêu cầu
  • Khung hình video được trích xuất từ video cục bộ và từ xa qua asBitmap
  • Nhân thumbnail tăng tốc hiển thị hình ảnh trong danh sách
  • Khuyến nghị của Google biến Glide thành tiêu chuẩn cho ứng dụng Android
  • RecyclerViewPreloader tải trước hình ảnh trước khi người dùng cuộn đến

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm