存内存---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;
}
};
};
------------------------------------------------------------------------------
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;
}
};
};