9)PhotoDataAdapter處理下的圖片加載機制
簡單說,可以分爲緩存機制以及線程池機制。兩個機制都有助於提高加載速度。
這裏有一個32個元素的數據索引區存放當前圖片周圍的圖片item,聲明見下。
private final MediaItem mData[] = newMediaItem[DATA_CACHE_SIZE];
private int mContentStart= 0;
private int mContentEnd= 0;
她的範圍用是介乎mContentStart與mContentEnd之間。
這個索引區主要起到定位獲取到圖片信息的作用。該數據索引區與接下來的緩存區有關。並且該內容會隨着切換顯示不同圖片而變化,具體變化跟mContentStart與mContentEnd有關,相關代碼還看不明白。
緩存區存放五個圖片元素,如前面所說,圖片元素可以是完整畫面顯示的圖片,位於圖片下方的縮略圖圖片,可能出現的GIF圖片。
這裏存放的其實確切不是圖片元素,可以從存放的ImageCache定義可知,
privateHashMap<Long, ImageEntry> mImageCache = new HashMap<Long,ImageEntry>();
private int mActiveStart = 0;
private int mActiveEnd = 0;
而imageentry存放有各種線程task,這個task負責着相應圖片元素的生成。而這些task均由下面提到的線程池進行啓動。
線程池最多能存放8個任務,同時能執行4個。這些任務,或者是生成縮略圖,或者是生成大圖片,或者是gif解碼。優先級先後順序也是按此順序。個人認爲,gif解碼耗時最長,生成縮略圖耗時最短,一般優先解決簡單問題。
隨着用戶手勢滑動圖片,緩存區都在滾動變化,猶如一個滑動窗口,滑動窗口外的數據都不理會先,只理會窗口內的數據先得到處理。
如此即是緩存機制與線程池機制。