關於Android載入圖片OOM之Fresco解決辦法
阿新 • • 發佈:2019-02-19
做Android開發已有一年,網路上解決oom的方案有很多,這裡我採用的是fresco,開源框架,這個框架介紹什麼的,我也就不多說了,沒啥意義,在這裡需要注意兩點:第一,這個框架是需要配置的,第二,oom根本在於超出系統給app制定的初始記憶體,因而出現oom。
fresco的配置詳情見官網,自行百度。這裡不是重點,重點是配置的時候需要新增這麼一行,setDownsampleEnabled(true),目的是為了讓fresco支援其他格式的圖片,完整的配置引數是這樣的:
其次是圖片的載入,我寫了一個靜態的方法:public class App extends Application { @Override public void onCreate() { super.onCreate(); ImagePipelineConfig config = ImagePipelineConfig.newBuilder(this) .setDownsampleEnabled(true) .build(); Fresco.initialize(this,config); } }
private static void setImg(SimpleDraweeView mImg, String url) { Uri uri = Uri.parse(url + R.drawable.s1); ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri) .setResizeOptions(new ResizeOptions(dp2px(140), dp2px(90))) .build(); DraweeController controller = Fresco.newDraweeControllerBuilder() .setOldController(mImg.getController()) .setControllerListener(new BaseControllerListener<ImageInfo>()) .setImageRequest(request).build(); mImg.setController(controller); }
完成配置,載入圖片,下面放上兩張圖,一張是不壓縮,直接載入圖片的,一張是壓縮圖片載入的,大家可以看看區別,每張圖片大概都是4M;
第一張,不壓縮,直接載入的:
第二章:壓縮圖片載入的:
區別就是這麼大。。。
祝各位:在Android開發的道路上,越走越遠,越來越順利~