Android Studio 第六十七期 - Android Glide3.7.0和3.8.0用法

來源:互聯網
上載者:User

標籤:tom   用法   代碼   read   pac   master   佔用   官方   adt   

一、前言:再優秀的開源庫都有坑要填

手上的項目使用的圖片載入架構是:Universal-Image-Loader+業務需要定製化的一些代碼。Universal-Image-Loader 這個架構是一個非常經典好用的架構,唯一的問題是是作者很久之前就不再更新了。所以綜合考慮下,確定使用Glide+封裝代替當前的圖片載入架構。

二、困惑:

在沒有真正使用 Glide 之前,我所看到的文章基本都是讚美這個庫的功能強大,載入流暢。然而,當我用上了以後,才發現並不完美。遇到了不少的坑,需要自己填。

2.1 Glide 配合 OKHttp 使用的坑:

需要在Gradle中引入:
compile "com.github.bumptech.glide:glide:3.7.0"
compile "com.github.bumptech.glide:okhttp3-integration:[email protected]"
這裡就有一個坑,如果你用到自訂的 GlideModule,這裡的可能會失效,被com.github.bumptech.glide:okhttp3-integration:[email protected]預設的替換
解決方案是升級版本號碼:
compile "com.github.bumptech.glide:okhttp3-integration:[email protected]" -》 compile "com.github.bumptech.glide:okhttp3-integration:1.5.0" 

注意,沒有@arr 還有1.5.0預設選擇是3.8.0的glide 所以改一下3.7.0的引入compile "com.github.bumptech.glide:glide:3.7.0"-》compile "com.github.bumptech.glide:glide:3.8.0"


2.2 OKHttpClient 逾時設定導致圖片無法載入坑:

因為Glide本身只負責圖片載入,網路請求圖片資料由網路架構決定。網路請求一般會有逾時的問題,坑的是OKHttp預設的逾時時間太短了,如果不修改,網路狀態比較差
就很容易請求逾時,圖片自然就載入不出來。我設定的參數是60,60,30這個可以自己根據實際情況確定。

//這個是源碼裡面的,預設逾時時間,都是10s,10000msconnectTimeout = 10_000;readTimeout = 10_000;writeTimeout = 10_000;//手動設定逾時時間 OkHttpClient client=new OkHttpClient.Builder()                                .connectTimeout(HTTP_CONNECT_TIMEOUT, TimeUnit.SECONDS)                                .readTimeout(HTTP_READ_TIMEOUT, TimeUnit.SECONDS)                                .writeTimeout(HTTP_WRITE_TIMEOUT, TimeUnit.SECONDS)                                .build;
2.3 Glide 查看 log 的坑:

如果你使用 Glide 經常出現圖片載入不出來或者載入有問題,你需要查看 Glide 本身的 log,不過這個必須通過 adb 命令開啟,詳情百度,需要注意如果是請求圖片問題,關注請求的 log,圖片載入||轉換的問題,關注圖片載入||轉換的log。

2.4 Glide 載入的圖片記憶體佔用巨多的坑:

在使用 Glide 的第一個版本,OOM 問題一下子爆炸了,查看記憶體佔用,使用 Universal-Image-Loader 的舊版本,App 佔用50m~80m記憶體,
而使用 Glide 載入列表大圖的時候,突然猛增到120M+,低端機器自然很容易就 OOM 了。
Glide 有一個優點被很多人稱讚,就是它會根據圖片控制項的大小對 Bitmap 進程縮放處理,適應控制項的大小。
但是,如果是一個控制項,在高分屏下,它的控制項大小往往比實際圖片尺寸大很多,舉例一個控制項:
長寬:1080400,圖片原始大小540200,如果不做任何設定,Glide 會把 bitmap 放大到控制項大小,那麼佔用的記憶體就變成了原始大小四倍。。。

這個是 Glide 的特性,暫時沒有找到的方法修改。
臨時方案:為了避免Glide自動把bitmap放大,使用在載入圖片的時候,使用 .override(width, height) 限制圖片的寬高

2.5 Glide 使用過渡動畫造成圖片變形的 bug

Glide 預設會載入圖片的時候會有一個過渡效果,其原理是採用TransitionDrawable實現的。
但是這個和 placeHolder,一起使用,尤其是你的playHolder的尺寸比你載入的圖片要大,這個時候就會出現,你載入出來的圖片變形的問題。
很多人推薦使用 .dontAnimate() 解決問題,即去掉過渡動畫。
但是,如果產品一定需要加入過渡動畫,官方其實沒有提供完美的解決方案,Glide的作者之一在stackoverflow有回答並且給出了 github 的代碼。
http://stackoverflow.com/questions/32235413/glide-load-drawable-but-dont-scale-placeholder
https://github.com/TWiStErRob/glide-support/tree/master/src/glide4/java/com/bumptech/glide/supportapp

注意:我在使用的過程中發現,如果你的ImageView的type是center_crop 的話,那麼必須確保你的place_holder預設圖片,長寬小於你載入的圖片,不然即使使用的了作者的代碼,任然會有變形的問題。




    

Android Studio 第六十七期 - Android Glide3.7.0和3.8.0用法

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.