當前位置:首頁 » 編程語言 » lrujava

lrujava

發布時間: 2024-12-10 08:26:33

『壹』 android disklrucache怎麼使用

下面是一個簡單的DiskLruCache實現。然而推薦的實現DiskLruCache方案請參考Android4.0中(libcore/luni/src/main/java/libcore/io/DiskLruCache.java)源碼。本文使用的是之前版本中的簡單實現(Quick Search中是另外的實現).

顯示是簡單實現DiskLruCache更新後的例子:

private DiskLruCache mDiskCache;
private static final int DISK_CACHE_SIZE = 1024 * 1024 * 10; // 10MB
private static final String DISK_CACHE_SUBDIR = "thumbnails";

@Override
protected void onCreate(Bundle savedInstanceState) {
...
// Initialize memory cache
...
File cacheDir = getCacheDir(this, DISK_CACHE_SUBDIR);
mDiskCache = DiskLruCache.openCache(this, cacheDir, DISK_CACHE_SIZE);
...
}

class BitmapWorkerTask extends AsyncTask {
...
// Decode image in background.
@Override
protected Bitmap doInBackground(Integer... params) {
final String imageKey = String.valueOf(params[0]);

// Check disk cache in background thread
Bitmap bitmap = getBitmapFromDiskCache(imageKey);

if (bitmap == null) { // Not found in disk cache
// Process as normal
final Bitmap bitmap = (
getResources(), params[0], 100, 100));
}

// Add final bitmap to caches
addBitmapToCache(String.valueOf(imageKey, bitmap);

return bitmap;
}
...
}

public void addBitmapToCache(String key, Bitmap bitmap) {
// Add to memory cache as before
if (getBitmapFromMemCache(key) == null) {
mMemoryCache.put(key, bitmap);
}

// Also add to disk cache
if (!mDiskCache.containsKey(key)) {
mDiskCache.put(key, bitmap);
}
}

public Bitmap getBitmapFromDiskCache(String key) {
return mDiskCache.get(key);
}

// Creates a unique subdirectory of the designated app cache directory. Tries to use external
// but if not mounted, falls back on internal storage.
public static File getCacheDir(Context context, String uniqueName) {
// Check if media is mounted or storage is built-in, if so, try and use external cache dir
// otherwise use internal cache dir
final String cachePath = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED
|| !Environment.isExternalStorageRemovable() ?
context.getExternalCacheDir().getPath() : context.getCacheDir().getPath();

return new File(cachePath + File.separator + uniqueName);
}
內存緩存檢查在UI線程中做,磁碟緩存的檢查在後台線程中。硬碟操作不應在UI線程中。圖片處理完成後應將其加入正在使用的內存、磁碟緩存中。

熱點內容
泰拉瑞亞蒲公英怎麼開在線伺服器 發布:2025-03-14 14:21:20 瀏覽:629
如何破壞門上的密碼鎖 發布:2025-03-14 14:19:39 瀏覽:968
咖啡源碼 發布:2025-03-14 13:51:32 瀏覽:168
android漂亮的listview 發布:2025-03-14 13:40:26 瀏覽:392
android路線規劃 發布:2025-03-14 13:23:22 瀏覽:304
poi瀏覽器島風go緩存 發布:2025-03-14 13:10:24 瀏覽:189
具體可要說存儲在鋼瓶中是因為 發布:2025-03-14 13:00:36 瀏覽:442
汽車空調壓縮機不轉了 發布:2025-03-14 12:55:45 瀏覽:32
安卓和平營地cp怎麼組 發布:2025-03-14 12:55:40 瀏覽:606
時序模式演算法 發布:2025-03-14 12:50:45 瀏覽:205