package com.ab.bitmap; import android.os.AsyncTask; import android.os.Handler; import android.os.Message; import android.util.Log; import com.ab.global.AbAppData; import com.ab.util.AbFileUtil; import com.ab.util.AbStrUtil; /** * * Copyright (c) 2012 All rights reserved * 名称:AbImageDownloadTask.java * 描述:AsyncTask实现的下载,单次下载 * @author zhaoqp * @date:2013-9-2 下午12:47:51 * @version v1.0 */ public class AbImageDownloadTask extends AsyncTask<AbImageDownloadItem, Integer, AbImageDownloadItem> { /** The tag. */ private static String TAG = "AbImageDownloadTask"; /** The Constant D. */ private static final boolean D = AbAppData.DEBUG; /** 下载完成后的消息句柄. */ private static Handler handler = new Handler() { @Override public void handleMessage(Message msg) { //if(D)Log.d(TAG, "任务callback handleMessage..."); AbImageDownloadItem item = (AbImageDownloadItem)msg.obj; item.listener.update(item.bitmap, item.imageUrl); } }; public AbImageDownloadTask() { super(); } /** * 这里的第一个参数对应AsyncTask中的第一个参数 * 这里的String返回值对应AsyncTask的第三个参数 * 该方法并不运行在UI线程当中,主要用于异步操作,所有在该方法中不能对UI当中的空间进行设置和修改 * 但是可以调用publishProgress方法触发onProgressUpdate对UI进行操作 */ @Override protected AbImageDownloadItem doInBackground(AbImageDownloadItem... items) { AbImageDownloadItem item = items[0]; //检查图片路径 String url = item.imageUrl; if(AbStrUtil.isEmpty(url)){ if(D)Log.d(TAG, "图片URL为空,请先判断"); }else{ url = url.trim(); } String cacheKey = AbImageCache.getCacheKey(url, item.width, item.height, item.type); item.bitmap = AbImageCache.getBitmapFromCache(cacheKey); if(item.bitmap == null){ //开始下载 item.bitmap = AbFileUtil.getBitmapFromSDCache(item.imageUrl,item.type,item.width,item.height); //缓存图片路径 AbImageCache.addBitmapToCache(cacheKey,item.bitmap); //需要执行回调来显示图片 if (item.listener != null) { Message msg = handler.obtainMessage(); msg.obj = item; handler.sendMessage(msg); } }else{ if(D) Log.d(TAG, "从内存缓存中得到图片:"+cacheKey+","+item.bitmap); if (item.listener != null) { Message msg = handler.obtainMessage(); msg.obj = item; handler.sendMessage(msg); } } return item; } @Override protected void onCancelled() { super.onCancelled(); } @Override protected void onPostExecute(AbImageDownloadItem item) { if (item.listener != null) { item.listener.update(item.bitmap, item.imageUrl); } } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected void onProgressUpdate(Integer... values) { super.onProgressUpdate(values); } }