Search

Android - 使用 Picasso 解決圖片載入造成 OutOfMemoryError 的問題

2015-10-27 10:00 PM

OOM - OutOfMemoryError

一件非常討厭的錯誤

而且是在轉戰 Android 時常常會遇見的錯誤

以前寫 Web 可以說是要用多少記憶體就用多少記憶體...

其實也不是啦 只是 Web 用的記憶體相對於使用者的記憶體大小來說實在是小 case

就算載入一個單眼拍出來的 20M 高解析照片也不是問題

但在 Android 上就麻煩了

好在有團隊開發出一個免費的 Library - Picasso

不論是圖片載入問題, 快取問題還是 AsyncTask 他都幫你處理的穩當當

好了,為了 SEO 而寫的廢話就到這裡

開始介紹如何使用 Picasso 這個套件來簡單避免 OOM 的錯誤

程式碼範例
// 若要了解圖片是從網路, 手機本地端或是從記憶體內取出
// 可開啟圖片標示 分別會以 紅色, 藍色, 綠色表示
Picasso.with(mContext).setIndicatorsEnabled(true);

// 初始化 Picasso
Picasso.with(mContext)
        // 傳入檔案路徑 可以是網址或本地檔案
        .load( "URL or PATH" )
        // 調整大小至與容器相等 亦可使用 resize,  但 resize 似乎只有調整大小 未實作 inSampleSize
        .fit()
        // 指定圖片尚未載入時的預設圖片
        .placeholder(R.drawable.v_image_placeholder)
        // 指定圖片載入失敗時的預設圖片
        .error(R.drawable.v_image_error)
        // 指定圖片置於容器中央 不裁切, 另有 centerCop
        .centerInside()
        // 不將圖片儲存於記憶體內
        .memoryPolicy(MemoryPolicy.NO_STORE)
        // 不檢查記憶體內是否存在圖片快取
        .memoryPolicy(MemoryPolicy.NO_CACHE)
        // 不儲存任何快取
        .networkPolicy(NetworkPolicy.NO_CACHE)
        // 指定圖片顯示的容器
        .into(holder.imageView);

各項資料連結
Picasso

No comments:

Post a Comment