Android DiskLruCache 摘录

摘录自:http://www.tuicool.com/articles/JB7RNj


初学Android,以后备用。

获取data/data路径:

public File getDiskCacheDir(Context context, String uniqueName) {
  String cachePath;
  if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())
      || !Environment.isExternalStorageRemovable()) {
    cachePath = context.getExternalCacheDir().getPath();
  } else {
    cachePath = context.getCacheDir().getPath();
  }
  return new File(cachePath + File.separator + uniqueName);
}

MD5编码:

public String hashKeyForDisk(String key) {
  String cacheKey;
  try {
    final MessageDigest mDigest = MessageDigest.getInstance("MD5");
    mDigest.update(key.getBytes());
    cacheKey = bytesToHexString(mDigest.digest());
  } catch (NoSuchAlgorithmException e) {
    cacheKey = String.valueOf(key.hashCode());
  }
  return cacheKey;
}

private String bytesToHexString(byte[] bytes) {
  StringBuilder sb = new StringBuilder();
  for (int i = 0; i < bytes.length; i++) {
    String hex = Integer.toHexString(0xFF & bytes[i]);
    if (hex.length() == 1) {
      sb.append('0');
    }
    sb.append(hex);
  }
  return sb.toString();
}

DiskLruCache Open:

DiskLruCache mDiskLruCache = null;
try {
  File cacheDir = getDiskCacheDir(context, "bitmap");
  if (!cacheDir.exists()) {
    cacheDir.mkdirs();
  }
  mDiskLruCache = DiskLruCache.open(cacheDir, getAppVersion(context), 1, 10 * 1024 * 1024);
} catch (IOException e) {
  e.printStackTrace();
}

DiskLruCache Editor:

String imageUrl = "https://img-my.csdn.net/uploads/201309/01/1378037235_7476.jpg";
String key = hashKeyForDisk(imageUrl);
DiskLruCache.Editor editor = mDiskLruCache.edit(key);
new Thread(new Runnable() {
  @Override
  public void run() {
    try {
      String imageUrl = "https://img-my.csdn.net/uploads/201309/01/1378037235_7476.jpg";
      String key = hashKeyForDisk(imageUrl);
      DiskLruCache.Editor editor = mDiskLruCache.edit(key);
      if (editor != null) {
        OutputStream outputStream = editor.newOutputStream(0);
        if (downloadUrlToStream(imageUrl, outputStream)) {
          editor.commit();
        } else {
          editor.abort();
        }
      }
      mDiskLruCache.flush();//更新日志 一般放在OnPase里面
    } catch (IOException e) {
      e.printStackTrace();
    }
  }
}).start();
DiskLruCache get:

try {
  String imageUrl = "https://img-my.csdn.net/uploads/201309/01/1378037235_7476.jpg";
  String key = hashKeyForDisk(imageUrl);
  DiskLruCache.Snapshot snapShot = mDiskLruCache.get(key);
  if (snapShot != null) {
    InputStream is = snapShot.getInputStream(0);
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    mImage.setImageBitmap(bitmap);
  }
} catch (IOException e) {
  e.printStackTrace();
}

DiskLruCache remove://一般不使用,因为DiskLruCache会自己清理

try {
  String imageUrl = "https://img-my.csdn.net/uploads/201309/01/1378037235_7476.jpg";  
  String key = hashKeyForDisk(imageUrl);  
  mDiskLruCache.remove(key);
} catch (IOException e) {
  e.printStackTrace();
}

DiskLruCache close():

这个方法用于将DiskLruCache关闭掉,是和open()方法对应的一个方法。关闭掉了之后就不能再调用DiskLruCache中任何操作缓存数据的方法,通常只应该在Activity的onDestroy()方法中去调用close()方法。

DiskLruCache  delete()

这个方法用于将所有的缓存数据全部删除,比如说网易新闻中的那个手动清理缓存功能,其实只需要调用一下DiskLruCache的delete()方法就可以实现了。

DiskLruCache  size()

这个方法会返回当前缓存路径下所有缓存数据的总字节数,以byte为单位,如果应用程序中需要在界面上显示当前缓存数据的总大小,就可以通过调用这个方法计算出来。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值