-
*/
-
public void showImageAsyn(ImageView imageView, String url, int resId){
-
imageView.setTag(url);
-
Bitmap bitmap = loadImageAsyn(url, getImageCallback(imageView, resId));
-
if(bitmap == null){
-
imageView.setImageResource(resId);
-
}else{
-
imageView.setImageBitmap(bitmap);
-
}
-
}
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享
public Bitmap loadImageAsyn(String path, ImageCallback callback){
-
// 判断缓存中是否已经存在该图片
-
if(caches.containsKey(path)){
-
// 取出软引用
-
SoftReference rf = caches.get(path);
-
// 通过软引用,获取图片
-
Bitmap bitmap = rf.get();
-
// 如果该图片已经被释放,则将该path对应的键从Map中移除掉
-
if(bitmap == null){
-
caches.remove(path);
-
}else{
-
// 如果图片未被释放,直接返回该图片
-
Log.i(TAG, “return image in cache” + path);
-
return bitmap;
-
}
-
}else{
-
// 如果缓存中不常在该图片,则创建图片下载任务
-
Task task = new Task();
-
task.path = path;
-
task.callback = callback;
-
Log.i(TAG, “new Task ,” + path);
-
if(!taskQueue.contains(task)){
-
taskQueue.add(task);
-
// 唤醒任务下载队列
-
synchronized (runnable) {
-
runnable.notify();
-
}
-
}
-
}
-
// 缓存中没有图片则返回null
-
return null;
-
}
-
/**
-
*
-
* @param imageView
-
* @param resId 图片加载完成前显示的图片资源ID
-
* @return
-
*/
-
private ImageCallback getImageCallback(final ImageView imageView, final int resId){
-
return new ImageCallback() {
-
@Override
-
public void loadImage(String path, Bitmap bitmap) {
-
if(path.equals(imageView.getTag().toString())){
-
imageView.setImageBitmap(bitmap);
-
}else{
-
imageView.setImageResource(resId);
-
}
-
}
-
};
-
}
-
private Handler handler = new Handler(){
-
@Override
-
public void handleMessage(Message msg) {
-
// 子线程中返回的下载完成的任务
-
Task task = (Task)msg.obj;
-
// 调用callback对象的loadIma