http://frescolib.org/docs/configure-image-pipeline.htmlのドキュメントに記載されている手順を使用して、Fresco をセットアップしました。
ImagePipelineConfig config = ImagePipelineConfig
.newBuilder(this)
.setBitmapsConfig(Bitmap.Config.RGB_565)
.setRequestListeners(requestListeners)
.setDownsampleEnabled(true)
.build();
Fresco.initialize(this, config);
これは、必要に応じてアプリケーション onCreate で一度設定されます。ネットワークからの画像はほとんどなく、サイズが一致しないため、サイズ変更オプションを指定して setDownsampleEnabled を使用する必要があります。
以下は、画像をロードするために使用されるコードです -
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(asseturl))
.setProgressiveRenderingEnabled(true)
.setResizeOptions( new ResizeOptions(width,height))
.build();
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setImageRequest(request)
.setOldController(sdv.getController())
.setTapToRetryEnabled(true)
.build();
sdv.setController(controller);
コントローラーは、Recyclerview の onViewDetachedFromWindow および onViewRecycled メソッドで null に設定されます。
アプリを実行してから数分以内に、使用されるメモリが非常に多くなります。
プロファイラーのメモリ グラフは見栄えがよくありません。
参考までにヒープダンプを添付します。
Fresco のログも確認しました。ログには、同じ画像のダウンサンプリングが複数回記載されています。ただし、画像のリクエストが一度だけ行われることを確認しました。
添付された Logcat スナップショット