Fresco加載圖片內存佔用過大導致OOM

Fresco加載網絡圖片部分設備出現顯示部分圖片爲黑色並崩潰

1.在使用Fresco顯示網絡圖片在天貓魔盒M17設備時,出現部分圖片顯示爲黑色,且一段時間後程序崩潰。

嘗試把setImageURI方法替換爲 public static void setBlurImage(SimpleDraweeView draweeView, String path) { ImageRequest request = ImageRequestBuilder. newBuilderWithSource(Uri.parse(path)) .setPostprocessor(new BlurPostprocessor(draweeView.getContext())) .build(); PipelineDraweeController controller = (PipelineDraweeController) Fresco .newDraweeControllerBuilder() .setImageRequest(request) .setOldController(draweeView.getController()) .build(); draweeView.setController(controller); } 後,原本正常顯示的圖片變得模糊,且還是部分圖片顯示黑色。

 

造成原因:不同設備給應用分配的內存大小不同,在使用Fresco加載大量圖片的時候後容易造成內存溢出,使得佔位圖片被回收,顯示爲黑色

 

解決方案:SimpleDraweeView.setImageURI(url)方法改爲

public static void showThumb(SimpleDraweeView draweeView, String url, int resizeWidthDp, int resizeHeightDp) {
        if (url == null || "".equals(url))
            return;
        if (draweeView == null)
            return;
        ImageRequest request = ImageRequestBuilder.newBuilderWithSource(Uri.parse(url))
                .setResizeOptions(new ResizeOptions(DensityUtils.dip2px(draweeView.getContext(), resizeWidthDp), DensityUtils.dip2px(draweeView.getContext(), resizeHeightDp)))
                .build();
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(request)
                .setOldController(draweeView.getController())
                .setControllerListener(new BaseControllerListener<ImageInfo>())
                .build();
        draweeView.setController(controller);
}

resizeWidthDp和resizeHeightDp的數值設置越小,所佔用的內存越小,resizeWidthDp和resizeHeightDp數值與圖片展示長寬無關,只與圖片顯示分辨率有關。例如設置100*100還是有問題的話可以調整至更小,數字隨意如50 *50。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章