[解決済み] アプリケーションコンテキストによるグライドイメージのロード
2023-06-20 07:31:20
質問
アンドロイドアプリで画像の読み込みにglideを使っていますが、クラッシュを避けるため、アプリケーションのコンテキストで画像を読み込んでいます。アプリケーションのパフォーマンスとメモリにどのような影響を与えますか?
どのように解決するのですか?
<ブロッククオートアプリケーションのパフォーマンスやメモリにどのような影響があるのでしょうか?
Glideは非常に多くの
.with()
メソッドを提供するのは、ライフサイクルに沿っているからです。
を想像してみてください。
Fragment
が動的にアクティビティに追加されるとします。その
onCreateView
メソッドで、3MBの画像のGlideロードを開始します。さて、ユーザーが戻るボタンを押して、フラグメントが削除されたり、アクティビティ全体が閉じられたりしたらどうでしょうか?
-
もしあなたが
with(getActivity().getApplicationContext())
を使用しても何も起こりません。3MBのデータはすべてダウンロードされ、次にデコードされ、キャッシュされ、おそらくImageViewに設定され、そしてそれはガベージコレクションされます。 -
もしあなたが
with((Fragment)this)
Glide は Fragment のライフサイクルイベントを購読し、Fragment が停止されるとすぐに、未処理のリクエストはすべて一時停止され、破棄されると保留中のリクエストはすべてクリアされます。これは、画像のダウンロードが途中で停止し、その死んだフラグメントによってそれ以上のリソースが使用されないことを意味します。 -
もしあなたが
with(getActivity())
GlideはActivityのライフサイクルイベントを購読し、上記と同じことが起こりますが、Activityが停止または破壊されたときのみです。
ですから、ベストプラクティスは、未使用のリクエスト完了を避けるために、可能な限り近いコンテキスト/フラグメントを使用することです! (ロードを停止する手動方法もあります。
Glide.clear(ImageView|Target)
.)
これを実際に適用するために
with(this)
を使用しますが、そうでない場合、たとえばアダプタや画像の集中読み込みメソッドでは
RequestManager glide
を引数として渡し
glide.load(...
を使うことができます。
static loadImage(RequestManager glide, String url, ImageView view) {
glide.load(url).into(view);
}
またはアダプタで
class MyAdapter extends WhichEveryOneYouUse {
private final RequestManager glide;
MyAdapter(RequestManager glide, ...) {
this.glide = glide;
...
}
void getView/onBindViewHolder(... int position) {
// ... holder magic, and get current item for position
glide.load... or even loadImage(glide, item.url, holder.image);
}
}
で、これらをActivity/Fragmentから利用します。
loadImage(Glide.with(this), url, findViewById(R.id.image));
// or
list.setAdapter(new MyAdapter(Glide.with(this), data));
関連
-
[解決済み】Android 8:クリアテキストのHTTPトラフィックが許可されない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] B "の印刷が "#"の印刷より劇的に遅いのはなぜですか?
-
[解決済み] インスタンス状態の保存を使用してアクティビティ状態を保存するにはどうすればよいですか?
-
[解決済み] Androidの「コンテキスト」とは何ですか?
-
[解決済み] Bitmapオブジェクトに画像を読み込む際にOutOfMemoryが発生する問題
-
[解決済み] アプリケーションを終了することは嫌われますか?
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み] Android - タイトルバーに戻るボタンが表示される
-
[解決済み] Androidアプリケーションのヒープサイズを大きくするには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Nexus 4でUSBデバッグモードを見つける方法とオンにする方法
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] 「KotlinとAndroidで「パラメータTを推測するのに十分な情報がありません。
-
[解決済み] グリッドビューの高さが削減される
-
[解決済み] ProjectScopeServices に Factory タイプのサービスはありません。
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] google-services.jsonって実際何してるの?
-
[解決済み] Androidの環境設定。ユーザーが環境設定画面を使用していない場合、デフォルト値を読み込むにはどうすればよいですか?
-
[解決済み] Android: xml リソースからの整数値
-
[解決済み] アンドロイドボタンセレクター