1. 程式人生 > >關於Android載入圖片OOM之Fresco解決辦法

關於Android載入圖片OOM之Fresco解決辦法

    做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開發的道路上,越走越遠,越來越順利~