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。