Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用簡(jiǎn)單介紹
一,前言:為什么要引入Android-Universal-Image-Loader?
眾所周知,簡(jiǎn)單的幾個(gè)ImageView載入幾個(gè)圖像資源、或者這幾個(gè)圖像資源是從本地載入時(shí)無(wú)需考慮過(guò)多直接載入就可以。但當(dāng)成千上百個(gè)ImageView載入成千上百個(gè)圖像、尤其是當(dāng)這些圖片還是從網(wǎng)絡(luò)中異步獲取,那么須要考慮的問(wèn)題細(xì)節(jié)非常多非常繁瑣且easy出錯(cuò)。如今隨便舉例當(dāng)中幾條:
(1)最主要的問(wèn)題,網(wǎng)絡(luò)不可靠。可能在不可靠網(wǎng)絡(luò)載入過(guò)程中。圖片載入發(fā)生難以預(yù)估的失敗。
(2)已經(jīng)從網(wǎng)絡(luò)或本地中載入成功的圖片,應(yīng)該避免反復(fù)載入,反復(fù)載入造成網(wǎng)絡(luò)流量浪費(fèi)。以及設(shè)備計(jì)算資源的反復(fù)浪費(fèi)。因此須要考慮圖片緩存策略。
緩存分為兩級(jí)緩存:第一級(jí):內(nèi)存緩存,第二級(jí):“硬盤(pán)”緩存(一般是手機(jī)的外置存儲(chǔ)如SD卡和內(nèi)置存儲(chǔ))。實(shí)現(xiàn)這種層級(jí)緩存策略須要自己維護(hù)和組織。
內(nèi)存緩存能夠考慮使用Android的LruCache。詳情參考我的另外兩篇文章:
a、《使用新式LruCache代替SoftReference緩存圖片,Android異步載入圖片》,文章鏈接地址:http://blog.csdn.net/zhangphil/article/details/43667415
b、或者自己依照LruCache設(shè)計(jì)思路實(shí)現(xiàn)和管理內(nèi)存管理,《基于Java LinkedList,實(shí)現(xiàn)Android大數(shù)據(jù)緩存策略》,文章鏈接地址:http://blog.csdn.net/zhangphil/article/details/44116885
硬盤(pán)緩存則要自己建立緩存索引和緩存文件結(jié)構(gòu)(怎樣建立緩存文件夾?內(nèi)存在何時(shí)機(jī)把硬盤(pán)緩存的圖片增加等等問(wèn)題)。
(3)設(shè)想這一種情況,在一個(gè)Android豎直方向上ListView中有成千上萬(wàn)條圖片item,每條item中的圖片均需從網(wǎng)絡(luò)獲取。
用戶(hù)手指在屏幕上高速滑動(dòng),滑動(dòng)過(guò)程中,極有可能可見(jiàn)視野內(nèi)的圖片還沒(méi)有載入完畢后,用戶(hù)已經(jīng)高速的往下滑看以下的圖片去了。
而上面已經(jīng)消失的圖片載入線程假設(shè)置之不理任由其運(yùn)作,那么,當(dāng)用戶(hù)在不斷的下拉和上拉過(guò)程中,將會(huì)造成線程不斷的重建和執(zhí)行,內(nèi)存開(kāi)銷(xiāo)極大。而對(duì)于用戶(hù)來(lái)來(lái),最緊迫的當(dāng)前可見(jiàn)視野的圖片載入顯示可能由于線程過(guò)多而被無(wú)限期遲延到最后顯示。
這樣的情況一般得應(yīng)對(duì)策略師自己維護(hù)和管理一個(gè)線程池(關(guān)于Java線程池。詳情請(qǐng)參考我的另外一篇文章:《Java線程池:ExecutorService。Executors》,文章鏈接地址:http://blog.csdn.net/zhangphil/article/details/43898637 )。自己管理和維護(hù)多線程下載任務(wù)隊(duì)列。顯然。須要考慮的線程隊(duì)列問(wèn)題非常多,非常繁瑣。
等等還有非常多未列舉出來(lái)的細(xì)節(jié)問(wèn)題。
為了避免反復(fù)造輪子,這樣的情況下最好考慮使用一些業(yè)界比較成熟穩(wěn)定的開(kāi)源框架。
Android ImageLoader(Android-Universal-Image-Loader),是github上的一個(gè)第三方開(kāi)源圖像載入庫(kù)。該項(xiàng)目在github上的鏈接地址:
https://github.com/nostra13/Android-Universal-Image-Loader?
Android-Universal-Image-Loader主要應(yīng)用領(lǐng)域是ImageView載入圖片。
該開(kāi)源框架對(duì)上述問(wèn)題給予了充分的解決。并提供了其它額外的附加功能(如載入的圖片尺寸。載入動(dòng)畫(huà)等等)。
二、Android-Universal-Image-Loader使用簡(jiǎn)單介紹。
首先到Android-Universal-Image-Loader官方網(wǎng)址下載項(xiàng)目包。使用能夠分為兩種方法
(1)把Android-Universal-Image-Loader的所有實(shí)現(xiàn)源碼(*.java)放入到自己的項(xiàng)目文件夾src下,當(dāng)作是自己的源碼使用。
(2)導(dǎo)入Android-Universal-Image-Loader的jar庫(kù)文件。比方universal-image-loader-1.9.4.jar。
兩種方式都能夠。看個(gè)人偏好。
我用的是第一種方法。這樣能夠方便查閱甚至直接二次定制改動(dòng)Android-Universal-Image-Loader的源碼為自己所用。
代碼結(jié)構(gòu)層次如圖:
然后就能夠直接使用,現(xiàn)給出一個(gè)演示樣例。
測(cè)試用的MainActivity.java:
Item.xml文件:
素材error.png和Loading.gif能夠依據(jù)個(gè)人的須要選取不同的圖片資源。
ImageLoader在使用之前須要做一些初始化工作。配置ImageLoaderConfiguration和DisplayImageOptions 。
然后就能夠直接使用ImageLoader的displayImage()方法從網(wǎng)絡(luò)或本地存儲(chǔ)中異步載入圖片資源。而關(guān)于圖片資源的緩存和異步下載線程池隊(duì)列則交由ImageLoader為我們妥善在后臺(tái)管理好。
轉(zhuǎn)載于:https://www.cnblogs.com/zsychanpin/p/6949604.html
總結(jié)
以上是生活随笔為你收集整理的Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 堆 续2
- 下一篇: Quartus调用Modelsim SE