イメージギャラリーアプリケーションを開発しようとしています。エラーは、上記のページで発生します。私のページが読み込まれると、ViewPager
内のイメージビューと、私が使用した下部の水平ストリップが表示されますrecycler view.On load
OutOfMemory error on Glideを使ってビットマップを読み込んだViewpagerをスワイプし続ける
最初のイメージはViewPagerのイメージビューにロードされ、対応するイメージサムネイルは水平ストリップで強調表示されます。一番下の水平ストリップでサムネイルをクリックすると、対応する画像がViewpagerの画像ビューに読み込まれます。私のすべての機能は必要に応じて機能しています。しかし、私がアプリケーションのための大きなヒープを与えた後でさえ、ビューページャーを連続的にスワイプすると、アプリケーションは応答しなくなり/クラッシュします。ログとAndroid Monitorsのメモリグラフから、私は明らかにそのOOMエラーを確認することができました。 Glide
を使用してビューポートの画像ビューに画像を読み込む際の重要な要素があります。ビューページャのdestroyItemメソッド内で、私も呼ばれている
Glide
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
Glide.get(context).clearMemory();
AsyncTask.execute(new Runnable() {
@Override
public void run() {
//TODO your background code
Glide.get(context).clearDiskCache();
}
});
を:確かグライドはそれは私が次のメソッドを使用している使用してビットマップを解放作るために。
また、私がイメージビューにビットマップイメージをロードするために、次のグライドコードを使用しています
Glide
.into(new SimpleTarget<Bitmap>() {
@Override
public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) {
mediaDetails.get(curPos).getFullImageView().setImageBitmap(resource);
}
}
は、私がイメージビューにズームとパン機能を実装しているので、ビットマップリソースを必要としています。ビュー・ポケベル・ビューが破棄されたときに作成されたビットマップを解放する最も効果的な方法は何でしょうか。または、この問題を処理する他の方法がありますか?あなたの助けが最も価値があるでしょう。
ビューページャにオフセット制限を設定していますか? – savepopulation
@savepopulationそのデフォルト値、すなわち1に設定されています。私は限界を変更しようとしましたが、元に戻しました。 masoud valiの解決策は私にいくつかの休息を与えました。 Ramzのソリューションでさえ、クラスを追加する必要がある点を除いて同様です。 –
はいソリューションは機能するはずです。私はちょうどあなたがこの状況を引き起こす可能性のある大きな数にオフセット制限を設定しているのだろうかと思った。 – savepopulation