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
- /**
- * 修改文件的最后修改时间
- * @param dir
- * @param fileName
- */
- private void updateFileTime(String dir,String fileName) {
- File file = new File(dir,fileName);
- long newModifiedTime =System.currentTimeMillis();
- file.setLastModified(newModifiedTime);
- }
本地缓存优化
- /**
- *计算存储目录下的文件大小,当文件总大小大于规定的CACHE_SIZE或者sdcard剩余空间小于FREE_SD_SPACE_NEEDED_TO_CACHE的规定
- * 那么删除40%最近没有被使用的文件
- * @param dirPath
- * @param filename
- */
- private void removeCache(String dirPath) {
- File dir = new File(dirPath);
- File[] files = dir.listFiles();
- if (files == null) {
- return;
- }
- int dirSize = 0;
- for (int i = 0; i < files.length;i++) {
- if(files[i].getName().contains(WHOLESALE_CONV)) {
- dirSize += files[i].length();
- }
- }
- if (dirSize > CACHE_SIZE * MB ||FREE_SD_SPACE_NEEDED_TO_CACHE > freeSpaceOnSd()) {
- int removeFactor = (int) ((0.4 *files.length) + 1);
- Arrays.sort(files, newFileLastModifSort());
- Log.i(TAG, "Clear some expiredcache files ");
- for (int i = 0; i <removeFactor; i++) {
- if(files[i].getName().contains(WHOLESALE_CONV)) {
- files[i].delete();
- }
- }
- }
- }
- /**
- * 删除过期文件
- * @param dirPath
- * @param filename
- */
- private void removeExpiredCache(StringdirPath, String filename) {
- File file = new File(dirPath,filename);
- if (System.currentTimeMillis() -file.lastModified() > mTimeDiff) {
- Log.i(TAG, "Clear some expiredcache files ");
- file.delete();
- }
- }
文件使用时间排序
- /**
- * TODO 根据文件的最后修改时间进行排序 *
- */
- classFileLastModifSort implements Comparator<File>{
- public int compare(File arg0, File arg1) {
- if (arg0.lastModified() >arg1.lastModified()) {
- return 1;
- } else if (arg0.lastModified() ==arg1.lastModified()) {
- return 0;
- } else {
- return -1;
- }
- }
- }
内存保存:
在内存中保存的话,只能保存一定的量,而不能一直往里面放,需要设置数据的过期时间、LRU等算法。这里有一个方法是把常用的数据放到一个缓存中(A),不常用的放到另外一个缓存中(B)。当要获取数据时先从A中去获取,如果A中不存在那么再去B中获取。B中的数据主要是A中LRU出来的数据,这里的内存回收主要针对B内存,从而保持A中的数据可以有效的被命中。
更多精彩
赞助商链接