編輯:關於Android編程
內存緩存的擴展還是蠻重要的,無論是數據結構還是具體的實現還是值得我們進行細細的品味,下面咱們就一起能品味這裡面的趣味吧。
內存緩存的擴展主要學習下面的幾個類:FIFOLimitedMemoryCache、FuzzyKeyMemoryCache、LargestLimitedMemoryCache、LimitedAgeMemoryCache、LRULimitedMemoryCache、LruMemoryCache、UsingFreqLimitedMemoryCache以及WeakMemoryCache。
Ok,首先我們學習LimitedMemoryCache這個類。LimitedMemoryCache是LimitedMemoryCache的子類,其成員變量如下:
private final List由此可知內存緩存的數據結構是線程安全的隊列。queue = Collections.synchronizedList(new LinkedList ());
分析其函數,我們知道隊列的操作在這裡也是可以得到對應的體現。只是創建軟引用的方法還是可以觀察一下。
@Override protected Reference接下來,需要分析的第二個類是FuzzyKeyMemoryCache,按照類的注釋,這個類是框架內部使用的,它實現了MemoryCache這個接口。當前的類的成員變量如下:createReference(Bitmap value) { return new WeakReference (value); }
private final MemoryCache cache; private final ComparatorkeyComparator;
接下來我們要分析的類是LargestLimitedMemoryCache,這個類依舊是LimitedMemoryCache的子類,
其成員變量如下:
private final Map由此可見,當前的緩存的數據結構已經發生了變化,當前已經是HashMap,HashMa的優勢在於刪除離散的數據的效率高。valueSizes = Collections.synchronizedMap(new HashMap ());
重點關注一下其刪除對象的方法:
@Override protected Bitmap removeNext() { Integer maxSize = null; Bitmap largestValue = null; Set由此可見,迭代獲取最大的圖片,並且進行刪除。> entries = valueSizes.entrySet(); synchronized (valueSizes) { for (Entry entry : entries) { if (largestValue == null) { largestValue = entry.getKey(); maxSize = entry.getValue(); } else { Integer size = entry.getValue(); if (size > maxSize) { maxSize = size; largestValue = entry.getKey(); } } } } valueSizes.remove(largestValue); return largestValue; }
接下來需要分析的類是LimitedAgeMemoryCache,
繼續關注當前的成員變量:
private final MemoryCache cache; private final long maxAge; private final MaploadingDates = Collections.synchronizedMap(new HashMap ());
重點關注下面的成員變量
@Override public Bitmap get(String key) { Long loadingDate = loadingDates.get(key); if (loadingDate != null && System.currentTimeMillis() - loadingDate > maxAge) { cache.remove(key); loadingDates.remove(key); } return cache.get(key); }
由於比較多,這一講就到這裡停筆了,後面剩余的幾個類將會在後面的文章中講解。
今天我們來講解一下如何創建及調用自己的ContentProvider。在前面兩篇文章中我們分別講了如何讀寫聯系人和短消息,相信大家對於ContentProvider的操作
最近,同學的同學找我做了一款簡單的安卓手機軟件,第一次,一個人,做一個完整的項目。所以,在這裡總結一下完整的開發流程和步驟,方便後來人入門學習。其實,我是一個新手,沒有系
本文主要記錄一下Android SQLiteDatabase中如何判斷數據庫中表是否存在,以及測試SQLiteDatabase數據庫的基本操作。有關SQLite的詳細說明
概述http Cache指的是web浏覽器所具有的復用本地已緩存的文檔”副本”的能力。我們知道,通過網絡獲取內容有時候成本很高,因而緩