我正在處理大量小型位圖,其中大約有100個。但他們是非常小的縮略圖大小的圖像。我的設計是這樣的,我從服務器上下載列表並將它們保存在本地文件系統中。當用戶需要一個位圖,我做緩存已存儲在文件系統上的解碼位圖
BitmapFactory.decodeFile(pathName);
我的問題主要是:我應該緩存解碼位圖?因此,下次撥打電話時,不必再次解碼,我可以返回已解碼的圖像。在某些情況下,這些位圖會在我的應用程序中使用,所以解碼的調用頻繁。但另一方面,我會緩存大約100個位圖。因此,新的代碼將
if(null == bitmap)
return (bitmap = BitmapFactory.decodeFile(pathName));
else return bitmap;
有人可以請您談談對新設計的成本/收益的空間/時間複雜度,性能,完善的設計,這樣的條款?此外,位圖通常顯示在ListView中。
爲什麼從@dumazy響應不是我的情況很明顯:
當我從服務器上下載,我的元數據存儲在一個HashMap:
Map<String,MyIcon> myIcons …
和MyIcons類是這樣的:
class MyIcon{
String filepath;//path of image on local filesystem.
String url;// url to where image is on server
Bitmap myImage;// for caching so not to decode each time
...//other fields about the icon
//then a number of methods
}
從我的角度
所以,用LruCache會意味着創建內部m的靜態嵌套類擴展LruCache, yIcon。然後,對於MyIcon的每個實例,當位圖從LruCache中逐出時,我需要確保將關聯的myImage設置爲null。這看起來很複雜,我甚至不確定它會起作用。也許這裏的Java專家可以告訴我如何知道它是否工作,我應該實現它。
感謝您的文章,這是一個很好的閱讀。但我不太確定這對我來說是最好的解決方案。但根據你的回答,似乎我應該限制我擁有的緩存位圖的數量。我會在重構中考慮這一點。 +1。 –