面向对象的六大原则—–单一职责原则
图片缓存第一次代码:
public class ImageLoader {
//图片缓存
LruCache<String, Bitmap> mImageCache;
//线程池,线程池的数量就是cpu的数量
ExecutorService mExecutorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
//构造
public ImageLoader() {
initImageCache();
}
//获得图片的大小
private void initImageCache() {
//计算可以用的总的内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
//用1/4作为缓存的内存
int cacheSize = maxMemory / 4;
//初始化图片缓存的实例
mImageCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int getSize(Bitmap bitmap) {
//获得图片的大小 每行所占的字节数 bitmap的高
return bitmap.getRowBytes() * bitmap.getHeight() / 1024;
}
};
}
//图片缓存
public void displayImage(final String url, final ImageView imageView) {
imageView.setTag(url);
mExecutorService.submit(new Runnable() {
@Override
public void run() {
//下载图片
Bitmap bitmap = downloadImage(url);
//判断是否下载了图片
if(bitmap == null){
return;
}
//判断是否图片地址相同
if(imageView.getTag().equals(url)){
imageView.setImageBitmap(bitmap);
}
//内存缓存
mImageCache.put(url,bitmap);
}
});
}
//图片下载
private Bitmap downloadImage(String imageURL) {
Bitmap bitmap = null;
try {
URL url = new URL(imageURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
bitmap = BitmapFactory.decodeStream(conn.getInputStream());
conn.disconnect();
}catch (Exception e){
e.printStackTrace();
}
return bitmap;
}
}
第一次优化之后的代码:
/**
* 自定义图片缓存
*/
public class ImageLoader {
//图片缓存
ImageCache mImageCache = new ImageCache();
//线程池,线程池的数量就是cpu的数量
ExecutorService mExecutorService =
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
//图片缓存
public void displayImage(final String url, final ImageView imageView) {
imageView.setTag(url);
mExecutorService.submit(new Runnable() {
@Override
public void run() {
//下载图片
Bitmap bitmap = downloadImage(url);
//判断是否下载了图片
if (bitmap == null) {
return;
}
//判断是否图片地址相同
if (imageView.getTag().equals(url)) {
imageView.setImageBitmap(bitmap);
}
//内存缓存
mImageCache.put(url, bitmap);
}
});
}
//图片下载
private Bitmap downloadImage(String imageURL) {
Bitmap bitmap = null;
try {
URL url = new URL(imageURL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
bitmap = BitmapFactory.decodeStream(conn.getInputStream());
conn.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return bitmap;
}
}
/**
* 图片缓存
*/
public class ImageCache {
//图片lru缓存
LruCache<String, Bitmap> mImageCache;
//构造
public ImageCache() {
initImageCache();
}
//获得图片的大小
private void initImageCache() {
//计算可以用的总的内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
//用1/4作为缓存的内存
int cacheSize = maxMemory / 4;
//初始化图片缓存的实例
mImageCache = new LruCache<String, Bitmap>(cacheSize) {
@Override
protected int getSize(Bitmap bitmap) {
//获得图片的大小 每行所占的字节数 bitmap的高
return bitmap.getRowBytes() * bitmap.getHeight() / 1024;
}
};
}
public void put(String url, Bitmap bitmap) {
mImageCache.put(url, bitmap);
}
public Bitmap get(String url) {
return mImageCache.get(url);
}
}