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

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

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

缓存管理这里

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

/** 
 * @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.net/117218.html原文链接:https://javaforall.net

(2)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JavaScript 闭包详解

    JavaScript 闭包详解JavaScript闭包文章目录JavaScript闭包一、为什么要闭包二、外部得以访问函数内变量三、某些变量得以常驻内存1.垃圾回收机制对闭包的处理2.结合立即执行函数来保存某些变量总结#前言##1.什么是闭包函数闭包函数是声明在另一个函数内的函数,是被嵌套在父函数内部的子函数,在《JS高级程序设计-第3版》中对闭包解释是:”闭包是指有权访问另外一个函数作用域中的变量的函数.”闭包函数可以访问[包裹其的函数]内的各种参数和变量,即便外部函数已经执行完毕.(至于为什么请看下文).一、为什么

    2022年6月28日
    24
  • hesse矩阵和jacobi矩阵_安索夫矩阵和波士顿矩阵区别

    hesse矩阵和jacobi矩阵_安索夫矩阵和波士顿矩阵区别转载自:http://jacoxu.com/jacobian%E7%9F%A9%E9%98%B5%E5%92%8Chessian%E7%9F%A9%E9%98%B5/在网上看到的一篇不错的关于雅克比

    2022年8月3日
    7
  • CSS3 选择器

    CSS3 选择器CSS3选择器分为:结构型伪类选择器、UI元素状态伪类选择器,否定选择器,和伪元素一、结构型伪类选择器:first-child选择某个元素的第一个子元素; :last-child选择某个元素的最后一个子元素; :nth-child()选择某个元素的一个或多个特定的子元素; :nth-last-child()选择某个元素的一个或多个特定的子元素,从这个元素的最后一个子元素开始算; :…

    2022年7月11日
    20
  • 玩转c语言——c语言小游戏 迷宫小游戏(附源码)

    玩转c语言——c语言小游戏 迷宫小游戏(附源码)第一步要制作迷宫小游戏,我们要利用二维数组搭建场景,制作一个简易的迷宫#include<stdio.h>#include<stdlib.h>#include<windows.h>#include<conio.h>//小游戏所需的所有头文件intmain(){chara[100][100]={“######”, “#o#”, “####”, “###”, “##…

    2022年5月12日
    39
  • angular4父组件向子组件传值,子组件向父组件传值的方法

    angular4父组件向子组件传值,子组件向父组件传值的方法父组件向子组件传值@Input文件目录父组件:father.template.html<h1>父组件</h1><cmt-child[data]=’data’></cmt-child>father.component.tsimport{Component,OnIn…

    2022年5月9日
    74
  • 信道和带宽_信道带宽怎么计算

    信道和带宽_信道带宽怎么计算信道和带宽在用cmw500测试不同band下的throughput时,发现module在某几个band注册不上小区。后来经过同事顺滑的演示,得知是因为不同band支持不同的带宽,而我一直设置cmw500的Cellbandwidth=20MHZ,对于那些最大只支持10MHZ的band自然注册不上。关于不同Band支持的带宽可以参考下表(3GPPTS36.101V17.2.0(2021-06))Table5.6.1-1:E-UTRAchannelbandwidth结尾处分享一

    2022年10月7日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号