Glideは、Bumptechプロジェクトを通じてGoogleがサポートするAndroid向け画像読み込みライブラリです。このライブラリは、自動メモリ管理を備えた画像、GIFアニメーション、ビデオフレームの効率的な読み込みを提供します。GlideのGitHubリポジトリによると、このプロジェクトは20万以上のアプリケーションで使用されています。Glideは、Androidでのグラフィックス読み込みにおいてGoogleが推奨するライブラリです。
重要なポイント
Glideは、Androidアプリケーションで画像、アニメーションGIF、ビデオフレームを高速かつ効率的に読み込むためのライブラリです。このプロジェクトはGoogle傘下のBumptechによって開発され、Googleの公式アプリケーションで広く使用されています。
Glideの内部アーキテクチャはコンポーネントベースのアプローチで構築されています。Engineがリクエスト実行を管理し、DecodeJobがデコードを担当し、ResourceDecoderが生データをBitmapまたはDrawableに変換します。各段階はモジュールとレジストリを通じてカスタマイズ可能で、Glideは非標準的な画像フォーマットに対して極めて柔軟なライブラリとなっています。
多くの競合他社とは異なり、Glideは当初からAndroidの特性(ActivityとFragmentのライフサイクル、画面回転、設定変更)を考慮して設計されました。ライブラリはコンポーネントの状態に応じて自動的に読み込みを一時停止および再開します。
Android Developersによると、GlideはGoogleの公式ドキュメントで推奨される画像読み込みライブラリです。Google Play、Google Maps、その他のGoogle製品で使用されており、その信頼性とパフォーマンスが証明されています。
Glideと代替ライブラリの主な違いは、ImageViewのサイズに合わせた自動画像スケーリングです。Picassoがフル解像度で画像を読み込んでからスケーリングするのに対し、Glideはファイルを必要なサイズに直接デコードします。これにより、ピークメモリ消費が削減され、異なるセルサイズのリストでの表示が高速化されます。
Glideは、画像を操作するための幅広い機能を提供し、シンプルなシナリオから複雑なコンテンツ読み込みシナリオまで対応します。
GIFおよびアニメーションWebPは、静止画像と同じくらい簡単にGlideで読み込んで表示できます。ライブラリはMIMEタイプで自動的にフォーマットを検出し、アニメーションをデコードして、バックグラウンドスレッドでフレームを表示します。再生制御にはasGifおよびasBitmapメソッドが利用可能です。
Glideは、Activity、Fragment、Viewのライフサイクルに自動的にバインドします。Activityが一時停止されると読み込みは中断され、破棄されるとキャンセルされます。これにより、メモリリークや既に閉じられた画面の画像読み込みを防ぎます。統合はLifecycleOwnerのサポートを通じて機能します。
Glideは、URLまたはローカルパスからビデオのフレームを抽出できます。ビデオURIには、load()と組み合わせてasBitmap()メソッドを使用します。Glideは自動的にキーフレームまたは指定されたタイムスタンプのフレームを選択します。これはビデオサムネイルの表示に便利です。
GlideAppは、AppGlideModuleの設定に基づいて拡張APIを提供する生成クラスです。標準のGlide.withでは利用できないメソッド(カスタムデフォルトオプションでの読み込み、ライブラリとの統合、プリセット変換)を使用できます。生成には、AppGlideModuleを拡張するクラスに@GlideModuleアノテーションが必要です。
Glideは、エンジン、デコーダ、変換、キャッシュを備えた多層アーキテクチャを使用しています。各リクエストは、特定のImageViewに最適化されたハンドラのチェーンを通過します。
into(view)が呼び出されると、Glideはキャッシュ(アクティブリソース、メモリキャッシュ、ディスクキャッシュ)を確認し、その後ネットワークを確認します。画像は、画面密度とscaleTypeを考慮して、ターゲットのImageViewサイズに自動的にスケーリングされます。これによりメモリ使用量が削減されます — これが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を使用して行います。API生成にはAppGlideModuleによる設定が必要です。最小Android APIバージョンは21です。
build.gradleに、GlideApp API生成のためのkaptアノテーションプロセッサとともにGlideを追加します。Kotlinの場合は、annotationProcessorの代わりにkaptを使用します。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のサイズに調整します。読み込み中はプレースホルダーが表示され、失敗時には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)
ビデオフレームは、ローカルまたはリモートのビデオURIからGlideによって抽出されます。デフォルトでは、Glideはキーフレームを読み込みます。特定のタイムスタンプを指定するにはframeMillisを使用します。これはビデオギャラリーでプレビューを表示するのに便利です。
String videoUrl = "https://example.com/video.mp4";
Glide.with(context)
.asBitmap()
.load(videoUrl)
.override(200, 200)
.into(imageView)
多数の画像を含むアプリケーションを開発する際、RecyclerView向けのGlide最適化は重要なスキルです。適切な設定により、ラグやOOMエラーを防ぐことができます。
Glideの主要機能の1つは、RecyclerViewPreloaderによるRecyclerView統合です。このコンポーネントはスクロール速度と方向を分析し、数アイテム先で画面に表示される画像を事前読み込みします。プリローダーを使用するには、PreloadSizeProviderインターフェースを実装し、ターゲットのImageViewとともにコンストラクタに渡す必要があります。
正確なImageView寸法でoverride()メソッドを使用すると、読み込みが大幅に高速化します。Glideがターゲットの正確なサイズを把握すると、スケーリング手順を省略して、画像を必要な解像度に直接デコードできます。これにより、デコード時間とピークメモリ消費が30~40%削減されます。
異種コンテンツを含むフィードでは、アイテムタイプごとに異なるRequestOptionsを使用します。たとえば、大きなバナー画像にはoverride(1200, 600)とRGB_565品質を設定し、アバターにはoverride(200, 200)とtransformによる丸み付けを設定します。このアプローチにより、各コンテンツタイプに最適なリソース使用が実現します。
Glideは、エラー画像やカスタムRequestListenerを通じて柔軟なエラー処理オプションを提供します。RequestListenerを使用すると、読み込み成功または失敗に反応して、エラーのログ記録や分析データの送信が可能です。また、load()がURLの代わりにnullを受け取った場合に表示されるフォールバック画像も設定できます。
ユーザーがスクロールする前に画像を事前読み込みするには、RecyclerViewPreloaderを使用します。Glideは、スクロール速度を分析して事前に画像を読み込むプリローダーを通じてRecyclerView統合をサポートしています。
サムネイル倍率を使用すると、最初に画像の縮小版を表示し、その後フルバージョンを読み込むことができます。thumbnail(0.25f)を呼び出すと、25%サイズのバージョンが即座に表示され、後でフルサイズ画像が読み込まれます。これにより、即時読み込みの印象を与えます。
リストアダプターでは、Glideが毎回画像をスケーリングしないように、正確なImageView寸法で.override()を使用します。これにより、CPU負荷とメモリ消費が削減されます。キャッシュサイズは実験的に選択しますが、ディスクに250 MB、利用可能メモリの20%が適切な出発点です。
よくある質問
GlideはGIF、ビデオフレーム、アニメーションWebPをサポートしています。メモリをより効率的に管理し、Googleが推奨しています。Picassoはサイズが小さく、よりシンプルに使用できます。複雑なプロジェクトにはGlideを選んでください。
GlideはLifecycleOwner(Fragment、Activity)またはViewを受け取ります。ライブラリはLifecycleObserverを通じて状態を自動的に追跡し、一時停止時に読み込みを中断し、破棄時にキャンセルしてリークを防ぎます。
はい、load()の前にasBitmap()を使用します。GlideはGIFを静止画像として読み込み、最初のフレームのみを表示します。これは、パフォーマンス上の理由からGIFアニメーションが望ましくないリストに便利です。
Glideのキャッシュは3つのレベルで構成されています:アクティブリソース(現在使用中)、メモリ(LRUキャッシュ)、ディスク(LruCache)。キャッシュから読み込まれた画像は即座に表示されます。メモリが不足するとキャッシュは自動的にクリアされます。
カスタムHTTPクライアントは、AppGlideModuleのOkHttpUrlLoaderを介して登録します。registerComponentsをオーバーライドして、独自のOkHttpClientを登録します。これにより、インターセプター、証明書、カスタムタイムアウトを追加できます。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。