1. 程式人生 > >Android使用LruCache,DiskLruCache結合線程池打造類似(ImageLoader)圖片載入器

Android使用LruCache,DiskLruCache結合線程池打造類似(ImageLoader)圖片載入器

    雖然進行移動開發已經好幾年了(主要是android和ios)  也時常到csdn瞻仰牛人的技術文章 但由於比較懶所以很少寫部落格 這段時間比較充裕 所以來csdn時間就多了點 讓我寫這篇文章的機緣是 http://blog.csdn.net/lmj623565791/article/details/38476887 這篇文章(這是個牛人 大家有時間可以多去他的部落格看看) 裡面實現了圖片載入器 但缺少磁碟快取和網路載入 在加之最近也面試了一些android和ios開發者 感覺一些開發者雖然對一些第三方框架使用熟悉 但問及原理 大多一知半解  所以今天我就結合前面那篇文章的實現 實現一個類似於ImageLoader的圖片載入器(android的實現 非ios ios其實大同小異 相通的) 寫得不好 還請包涵

  實現ImageLoader 首先我們需要了解以下一些概念  

   1.移動裝置對圖片是非常敏感的 (android/ios都一樣 一旦圖片記憶體超出應用支援量的話 一樣崩掉)

   2.無論android還是ios更新Ui的操作都只能在UI執行緒 但是我們又不能把載入圖片這樣繁重耗時的任務放到ui執行緒執行 所以就涉及多執行緒操作和執行緒間的通訊問題

   3.圖片載入快取機制 目前主流的是 3級載入  它們的優先順序分別如下  記憶體載入 > 磁碟載入 > 網路載入 

     也就是說如果實現了3級載入的話 那麼首先載入器會從 記憶體中載入  如果記憶體沒載入到 那麼從磁碟快取載入 如果磁碟快取也載入不到 說明了該移動裝置上的app第一次訪問該圖片地址  所以只能從網路載入 

  通過以上的幾個概念我們知道  

   首先我門需要兩個快取器實現 分別是記憶體快取和磁碟快取 (本文使用LruCache作為記憶體快取 DiskLruCache作為磁碟快取) 

   其次我們需要把載入圖片的操作放到多執行緒中 (無論是磁碟快取的IO操作還是網路請求載入 本文連記憶體快取載入也放到了多執行緒中)  

   再次執行緒間通訊 (在移動裝置中主要指UI執行緒和非UI執行緒的通訊)  android主要是用handler機制實現執行緒通訊 (其實是執行緒通過維護一個佇列來實現通訊)

    以上就是實現的關鍵 

    原始碼我就不貼了 我把它上傳到了csdn上了 原始碼裡面有非常詳細的實現註釋 (我這個人比較懶 還請保函啊)

    圖片載入器只實現了核心功能  

    圖片載入器在 com.imageloader 包下 圖片載入器為MyImageLoader這個類 實現也借鑑了 http://blog.csdn.net/lmj623565791/article/details/38476887該文作者的一些實現 在此宣告 下