android数据缓存总结

存内存---sd卡或缓存---联网取数据
------------------------------------------------------------------------------
a.内存缓存,可以用软引用softreference,图片用lrucache;
[url]http://www.apkbus.com/forum.php?mod=viewthread&tid=13534[/url]
MyObject aRef = new  MyObject(); 
SoftReference aSoftRef=new SoftReference(aRef); 


public ImageLoader(Activity context) {
this.context=context;
//获取系统分配给每个应用的最大内存32M
long maxMemory = Runtime.getRuntime().maxMemory();
int cacheSize=(int)maxMemory/8;
//给lrucache分配4m
lruCache=new LruCache<String,Bitmap>(cacheSize){
//必须重写此方法,来测量Bitmap的大小
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes()*value.getHeight();
};
};
/**
* 存储对象到LruCache中
* @param key
* @param bitmap
*/
public void addBitmapToMemoryCache(String key,Bitmap bitmap) {
if (getBitmapFromCache(key)==null&&bitmap!=null) {
lruCache.put(key, bitmap);
}

}
读取
lruCache.get(key);
------------------------------------------------------------------------------------
b.存文件
fileUtils.saveBitmap(subUrl, bitmap);
/**
* 存储图片Bitmap方法
* @param fileName
* @param bitmap
*/
public void saveBitmap(String fileName,Bitmap bitmap){
if(bitmap==null)
return;
String path=getStorageDir();
File folderFile=new File(path);
if(!folderFile.exists()){
folderFile.mkdir();
}
File file=new File(path+File.separator+fileName);
// file.createNewFile();
FileOutputStream fos;
try {
fos = new FileOutputStream(file);
bitmap.compress(CompressFormat.JPEG, 100, fos);
fos.flush();
fos.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 手机SD卡根目录
*/
private static String sdPath=Environment.getExternalStorageDirectory().getPath();
/**
* 手机缓存目录
*/
private static String cachePath=context.getCacheDir().getPath();
------------------------------------------------------------------------------------------------
c.线程池取数据
/**
* 获取线程池 单例
* @return
*/
public ExecutorService getThreadPool(){

if(mImageThreadPool==null){
synchronized (ExecutorService.class) {
if(mImageThreadPool==null){
mImageThreadPool=new ThreadPoolExecutor(MCPU_COUNT+1, MCPU_COUNT*2+1, 1, TimeUnit.SECONDS, workQueue, new ThreadPoolExecutor.AbortPolicy());
// mImageThreadPool=Executors.newFixedThreadPool(2);
return mImageThreadPool;
}
}
}
return mImageThreadPool;
}


/**
* 取消正在下载的任务
*/
public synchronized void cancelTask() {
if(mImageThreadPool != null){
mImageThreadPool.shutdownNow(); 
mImageThreadPool = null;
}
}
 getThreadPool().execute(new Runnable(){
@Override
public void run() {
Bitmap bitmap = getBitmapFormUrl(url); 
System.out.println("getBitmapFormUrl:"+url+"  --  "+bitmap);
Message msg = handler.obtainMessage();
msg.obj = bitmap; 
handler.sendMessage(msg); 
fileUtils.saveBitmap(subUrl, bitmap);
addBitmapToMemoryCache(subUrl, bitmap); 
}
 
});


--------------------------------------------------------------------------------------------
d.handler收到信息后,刷新页面
public Handler pHandler=new Handler(){
@Override
  public void handleMessage(Message msg) {
  super.handleMessage(msg);
switch (msg.what) {
case 1:
property=(UserProperty)msg.obj;
//填充资产数据
use_iremain.setText(property.getUse_money());
total_imoney.setText(property.getSum()+"");
user_loading.setVisibility(View.GONE);
user_views.setVisibility(View.VISIBLE);
break;
case 2:
incomeList=(ArrayList<UserIncome>)msg.obj;
//TODO:填充收益曲线数据
 
break;
default:
break;
}
  };
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值