WEB开发网
开发学院手机开发Android 开发 Android远程图片获取和本地缓存 阅读

Android远程图片获取和本地缓存

 2012-07-15 11:42:04 来源:WEB开发网   
核心提示: /** * 修改文件的最后修改时间 * @param dir * @param fileName */ private void updateFileTime(String dir,String fileName) { File file = new File(dir,fil

  1. /**
  2. * 修改文件的最后修改时间
  3. * @param dir
  4. * @param fileName
  5. */
  6. private void updateFileTime(String dir,String fileName) {
  7. File file = new File(dir,fileName);
  8. long newModifiedTime =System.currentTimeMillis();
  9. file.setLastModified(newModifiedTime);
  10. }

本地缓存优化

  1. /**
  2. *计算存储目录下的文件大小,当文件总大小大于规定的CACHE_SIZE或者sdcard剩余空间小于FREE_SD_SPACE_NEEDED_TO_CACHE的规定
  3. * 那么删除40%最近没有被使用的文件
  4. * @param dirPath
  5. * @param filename
  6. */
  7. private void removeCache(String dirPath) {
  8. File dir = new File(dirPath);
  9. File[] files = dir.listFiles();
  10. if (files == null) {
  11. return;
  12. }
  13. int dirSize = 0;
  14. for (int i = 0; i < files.length;i++) {
  15. if(files[i].getName().contains(WHOLESALE_CONV)) {
  16. dirSize += files[i].length();
  17. }
  18. }
  19. if (dirSize > CACHE_SIZE * MB ||FREE_SD_SPACE_NEEDED_TO_CACHE > freeSpaceOnSd()) {
  20. int removeFactor = (int) ((0.4 *files.length) + 1);
  21. Arrays.sort(files, newFileLastModifSort());
  22. Log.i(TAG, "Clear some expiredcache files ");
  23. for (int i = 0; i <removeFactor; i++) {
  24. if(files[i].getName().contains(WHOLESALE_CONV)) {
  25. files[i].delete();
  26. }
  27. }
  28. }
  29. }
  30. /**
  31. * 删除过期文件
  32. * @param dirPath
  33. * @param filename
  34. */
  35. private void removeExpiredCache(StringdirPath, String filename) {
  36. File file = new File(dirPath,filename);
  37. if (System.currentTimeMillis() -file.lastModified() > mTimeDiff) {
  38. Log.i(TAG, "Clear some expiredcache files ");
  39. file.delete();
  40. }
  41. }

文件使用时间排序

  1. /**
  2. * TODO 根据文件的最后修改时间进行排序 *
  3. */
  4. classFileLastModifSort implements Comparator<File>{
  5. public int compare(File arg0, File arg1) {
  6. if (arg0.lastModified() >arg1.lastModified()) {
  7. return 1;
  8. } else if (arg0.lastModified() ==arg1.lastModified()) {
  9. return 0;
  10. } else {
  11. return -1;
  12. }
  13. }
  14. }

内存保存:

在内存中保存的话,只能保存一定的量,而不能一直往里面放,需要设置数据的过期时间、LRU等算法。这里有一个方法是把常用的数据放到一个缓存中(A),不常用的放到另外一个缓存中(B)。当要获取数据时先从A中去获取,如果A中不存在那么再去B中获取。B中的数据主要是A中LRU出来的数据,这里的内存回收主要针对B内存,从而保持A中的数据可以有效的被命中。

Tags:Android 远程 图片

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接