-
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对象的loadImage方法,并将图片路径和图片回传给adapter
-
task.callback.loadImage(task.path, task.bitmap);
-
}
-
};
-
private Runnable runnable = new Runnable() {
-
@Override
-
public void run() {
-
while(isRunning){
-
// 当队列中还有未处理的任务时,执行下载任务
-
while(taskQueue.size() > 0){
-
// 获取第一个任务,并将之从任务队列中删除
-
Task task = taskQueue.remove(0);
-
// 将下载的图片添加到缓存
-
task.bitmap = PicUtil.getbitmap(task.path);
-
caches.put(task.path, new SoftReference(task.bitmap));
-
if(handler != null){
-
// 创建消息对象,并将完成的任务添加到消息对象中
-
Message msg = handler.obtainMessage();
-
msg.obj = task;
-
// 发送消息回主线程
-
handler.sendMessage(msg);
-
}
-
}
-
//如果队列为空,则令线程等待
Android异步加载网络图片,android音乐播放器开发教程
![](https://img-home.csdnimg.cn/images/20240711042549.png)