Bitmap載入與Lrucache DisLrucache快取
阿新 • • 發佈:2019-01-22
1.bitmap
由於bitmap的特殊性,android單個應用對記憶體進行限制,這樣導致bitmap很容易造成記憶體溢位。
通過取樣率載入圖片對圖片進行處理,防止記憶體溢位,
1)將bitmapFactory.options的inSampleSize引數設定為false,載入圖片。
2) 獲取圖片的寬高
3)根據取樣率的規則計算出取樣率
4)將inSampleSize引數設定為true,重新載入圖片
android的快取策略
Lru ----> least recently Used 演算法:
核心思想: 當快取快滿時,淘汰掉近期沒有或者很少使用的快取目標,
圖片的快取核心思想:
我們為了提高使用者體驗,把圖片在記憶體中也快取一份,當我們在網路上請求一張圖片時,
首先會去記憶體中獲取,如果記憶體中沒有,我們會去裝置儲存中獲取,在沒有就去網路上獲取。
這樣會提高使用者的體驗和減少使用者的流量開銷;
由於Bitmap的特殊性以及android對單個應用所施加的記憶體限制,導致載入bitmap的時候容易
出現記憶體溢位,
如果
我們不在網路上獲取圖片和儲存裝置上載入圖片,這樣就會提高圖片的載入效率及使用者體驗。
Lru的演算法是當我們的記憶體快滿的時候,會淘汰近期很少使用的快取目標,容易被接受。
bitmap如何載入一個圖片,通過BitmapFactory類提供四個方法:decodeFile decodeResource,
decodeStream,和decodeByteArray(表示支援檔案,資源,輸入流,以及位元組陣列)中加載出
一個bitmap物件,其中decodeFile 和decodeResource又間接呼叫了decodeStream方法。
如何高效的載入bitmap那?
採用bitmapFactory.Options來載入所需尺寸的圖片,四個方法都支援bitmap.Options.
通過bitmapFactory.Options來縮放圖片,主要是inSampleSize引數,
inSampleSize必須是大於1才會有縮放效果的,
縮放的比例為(1/(inSampleSize的2次方))
android中的快取策略 1)為什麼要需要快取? 載入一批網路圖片,需要在下載後在使用者介面上顯示。 這樣會耗費大量的使用者流量,這樣會造成使用者不能接受, 2)圖片的三級快取 當應用想從網上載入一張圖片的時候,首先會從記憶體中獲取,記憶體中獲取不到,去儲存裝置中獲取。 儲存裝置中也沒有就會從網路上下載這張圖片, (因為從記憶體中載入圖片比儲存裝置中載入圖片要快,提高了應用效率,節約了不必要的流量) LRU的核心思想:會優先淘汰那些近期最少使用的快取物件。 採用LRU的演算法的快取有兩種: 1)LruCache用於實現記憶體快取 lruCache是一個泛型類,它內部採用一個LinkedHashMap以強引用的方式儲存外界的快取物件。 提供get put 方法完成快取的獲取和新增操作。 2)DisLruCache用於實現儲存裝置快取。 將快取物件寫入檔案系統從而實現快取的效果, DisLruCache提供了open方法建立自身, 四個引數: 1)磁碟儲存路徑 2) 應用版本號(一般設定為1) 3)單個節點對應的資料個數(一般設為1即可) 4)快取的總大小 (當快取超出這個設定值之後,DisLruCache會清除一些快取,) Dislrucahche的快取新增 通過Editor完成的,表示一個快取物件的編輯物件
android中的快取策略 1)為什麼要需要快取? 載入一批網路圖片,需要在下載後在使用者介面上顯示。 這樣會耗費大量的使用者流量,這樣會造成使用者不能接受, 2)圖片的三級快取 當應用想從網上載入一張圖片的時候,首先會從記憶體中獲取,記憶體中獲取不到,去儲存裝置中獲取。 儲存裝置中也沒有就會從網路上下載這張圖片, (因為從記憶體中載入圖片比儲存裝置中載入圖片要快,提高了應用效率,節約了不必要的流量) LRU的核心思想:會優先淘汰那些近期最少使用的快取物件。 採用LRU的演算法的快取有兩種: 1)LruCache用於實現記憶體快取 lruCache是一個泛型類,它內部採用一個LinkedHashMap以強引用的方式儲存外界的快取物件。 提供get put 方法完成快取的獲取和新增操作。 2)DisLruCache用於實現儲存裝置快取。 將快取物件寫入檔案系統從而實現快取的效果, DisLruCache提供了open方法建立自身, 四個引數: 1)磁碟儲存路徑 2) 應用版本號(一般設定為1) 3)單個節點對應的資料個數(一般設為1即可) 4)快取的總大小 (當快取超出這個設定值之後,DisLruCache會清除一些快取,) Dislrucahche的快取新增 通過Editor完成的,表示一個快取物件的編輯物件