网络图片加载缓慢问题解决方案
本人最近開發的app是一款電視機頂盒android app,該app打開后會去向服務器求取各個位置的圖片,圖片內容是服務器后臺事先上傳并配置好的。客戶端哪個頁面,哪個位置放哪張圖片,都是服務端配置的。所以app開啟后的2,3秒內可能要請求十幾、甚至幾十張圖片,并快速顯示出來。通常情況下是沒有問題的,但是有個別情況圖片開始加載到全部加載完畢需要一二十秒,這個問題困擾了我好久。下面是我們的解決過程。
?
- 首先懷疑網絡問題
服務器開發人員反復實驗多次,無論請求十張還是上百張,服務器都是快速返回圖片數據,絕不至于要一二十秒;
?
- 懷疑圖片加載引擎出問題
先后用了五種圖片加載引擎都會出現這種問題(用到的加載引擎有, ImageReq, FinalBitmap, facebook的fresco引擎,xutils, Picasso?,共五種,其中fresco 和xutils 在機頂盒上加載效果更好一些)。如果是加載引擎的問題,總不能所有引擎都有問題吧。
所以很可能代碼里哪里出錯了,或者圖片請求過程哪里出錯了。
?
- 一個一個圖片請求排查
經過給一個個圖片加載請求過程加log并排查,發現只有當最開始請求的圖片鏈接種有“無效鏈接”時才會有引擎加載慢的問題。
譬如,app開啟時要同時請求十幾張圖片,而最開始的幾張圖片連接時無效的或者客戶端永遠請求不到的,這時候引擎圖片請求就卡在這里,直到這幾張圖片請求出現網絡報錯或者“timeout”后才繼續執行后面的“鏈接正常”的圖片請求。這幾張無效的圖片請求導致后面十幾張或幾十張圖片請求滯后。
?
當然若是最后幾張圖片出現“無效鏈接”則不會導致所有圖片加載慢,此時最多是最后幾張圖片加載不出來。
只有最開始幾張圖片無效時才會出現這個問題。問題終于找到了。
?
- 解決方法
這種無效鏈接而加載慢的問題,是客戶端的原因嗎?有一部分,圖片請求時timeout時間太長了,所以最好自己能控制timeout時間,而不是全都交給引擎解決。1s內秒獲取不到,就通知timeout。當然還有服務端的原因:因為客戶端無法識別你這個鏈接是有效還是無效,譬如多加個字母,少加個數字客戶端都無從知曉。所以最好也在服務端排查,為什么會傳給客戶端錯誤的鏈接?!
所以最終這個問題的解決是服務端人員完成的: 在返回給客戶端發圖片鏈接的時候嚴格檢查,域名、路徑、圖片名字嚴格對應,保證所有圖片鏈接是有效的,能成功請求到的。
同時客戶端要完善圖片請求過程,請求1秒得不到響應就拋出timeout異常,不至于一直占用資源等待而影響其他圖片的獲取。
?
關于網絡請求圖片緩慢的問題真的很令人頭疼, 這僅僅是所有問題中的一個小插曲。記錄該過程,以供參考。
?
總結
以上是生活随笔為你收集整理的网络图片加载缓慢问题解决方案的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: X96 MAX变砖后usb烧录修复(by
- 下一篇: RecyclerView加载网络图片防止