前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >android内置存储器memory和第三方外部存储disk管理

android内置存储器memory和第三方外部存储disk管理

作者头像
全栈程序员站长
发布2022-07-06 10:43:06
2760
发布2022-07-06 10:43:06
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是全栈君。

缓存管理这里

http://blog.csdn.net/intbird/article/details/38338713

图片处理在这里

http://blog.csdn.net/intbird/article/details/38338811

界面回收图片在这里

http://blog.csdn.net/intbird/article/details/19905549

工具Jar包在这里说明:

http://pan.baidu.com/s/1c0q2SzY

代码语言:javascript
复制
/** 
 * @author intbird@163.com 
 * @time 20140606 
 */ 
package com.intbird.utils;

import java.io.File;

import com.yilake.store.FileHelper;

import android.graphics.Bitmap;
import android.os.Environment;
import android.util.LruCache;

public class CacheManager {
	//单例
	private static CacheManager cacheInstance;
	
	//内存缓存大小
	private final int MEMO_CACHE_SIZE=((int)(Runtime.getRuntime().maxMemory()/1024));
	//文件缓存大小
	private final int DISK_CACHE_SIZE=1024*1024*100;
	//内存缓存
	private LruCache<String,Bitmap> mMemoryCache;
	//文件缓存
	private DiskLruCache mDiskLruCache;
	private String cacheUrl="";
	
	public CacheManager() {
		//内存缓存
		mMemoryCache=new LruCache<String, Bitmap>(MEMO_CACHE_SIZE){
			protected int sizeOf(String key, Bitmap bitmap) {
				return bitmap.getByteCount()/1024;
			};
		};
		//文件缓存
		setBitmapFileCacheDir(FileHelper.DISK_CACHE_FILEDIR);
	}
	
	/**
	 * 获取单例
	 * @return
	 */
	public static CacheManager getInstance() {
		if(cacheInstance==null){
			cacheInstance=new CacheManager();
		}
		return cacheInstance;
	}
	
	/**
	 * 设置缓存文件夹;
	 * @param cacheDir
	 */
	public void setBitmapFileCacheDir(String cacheDir){
		File cacheFile=	getDiskFileCache(cacheDir);
		cacheUrl=cacheFile.getAbsolutePath();
		mDiskLruCache=DiskLruCache.openCache(cacheFile, DISK_CACHE_SIZE);
	}
	/**
	 * 返回缓存文件夹路径
	 * @return
	 */
	public String getBitmapFileCacheDir(){
		return cacheUrl;
	}
	
	//通用外部调用
	public void addBitmapToCache(String fileUrl, Bitmap bitmap) {
		addBitmapToMemory(fileUrl,bitmap);
		addBitmapToDisk(fileUrl,bitmap);
	}

	public Bitmap getBitmapFromCache(String key){
		Bitmap bmp=null;
		bmp=getBitmapFromMemory(key);
		if(bmp==null){
			bmp=getBitmapFromDisk(key);
		}
		return bmp;
	}

	/**
	 * 图片增加内存缓存
	 * @param key
	 * @param bitmap
	 */
	private void addBitmapToMemory(String key,Bitmap bitmap){
		if(getBitmapFromMemory(key)==null){
			mMemoryCache.put(key, bitmap);
		}
	}
	/**
	 * 获取内存缓存图片
	 * @param key
	 * @return
	 */
	private Bitmap getBitmapFromMemory(String key){
		return mMemoryCache.get(key);
	}
	/**
	
	 * 将图片增加文件缓存
	 * @param key
	 * @param bitmap
	 */
	private void addBitmapToDisk(String key,Bitmap bitmap){
        if (mDiskLruCache != null && mDiskLruCache.get(key) == null) {
            mDiskLruCache.put(key, bitmap);
        }
	}
	/**
	 * 从文件缓存中获取图片
	 * @param key
	 * @return
	 */
	private Bitmap getBitmapFromDisk(String key){
        if (mDiskLruCache != null) {
            return mDiskLruCache.get(key);
        }
	    return null;
	}
	
	/**
	 * 获取缓存文件夹
	 * @return
	 */
	public static File getDiskFileCache(String cacheDir){
		String cachePath =Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState()) ||
	                    !Environment.isExternalStorageRemovable() ? 
	                    		Environment.getExternalStorageDirectory().getPath():
	                    		Environment.getDataDirectory().getPath();
	    File file =new File(cachePath + File.separator + cacheDir);
	    if(!file.exists()) file.mkdir();
	    return file;
	}
}

版权声明:本文博客原创文章。博客,未经同意,不得转载。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/117218.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年1月9,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
图片处理
图片处理(Image Processing,IP)是由腾讯云数据万象提供的丰富的图片处理服务,广泛应用于腾讯内部各产品。支持对腾讯云对象存储 COS 或第三方源的图片进行处理,提供基础处理能力(图片裁剪、转格式、缩放、打水印等)、图片瘦身能力(Guetzli 压缩、AVIF 转码压缩)、盲水印版权保护能力,同时支持先进的图像 AI 功能(图像增强、图像标签、图像评分、图像修复、商品抠图等),满足多种业务场景下的图片处理需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档