修改后的代码import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.net.HttpURLConnection;
import java.net.URL;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.ImageView;
/**
* @类名:ImageDownloader
* @功能描述:优化的ImageDownloader, 不带缓存,在线下载,用户头像请使用。
* @作者: William Xu
* @创建日期:2013-6-7
* @修改人:
* @修改日期:
* @修改备注:
* @版本号:1.0
*/
public class ImageDownloader {
public void download(String url, ImageView p_w_picpathView) {
BitmapDownloaderTask task = new BitmapDownloaderTask(p_w_picpathView);
task.execute(url);
}
class BitmapDownloaderTask extends AsyncTask {
private final WeakReference p_w_picpathViewReference; // 使用WeakReference解决内存问题
public BitmapDownloaderTask(ImageView p_w_picpathView) {
p_w_picpathViewReference = new WeakReference(p_w_picpathView);
}
@Override
protected Bitmap doInString... params) { // 实际的下载线程,内部其实是concurrent线程,所以不会阻塞
Bitmap bitmap = null;
try {
URL p_w_picpathUrl = new URL(params[0]);
HttpURLConnection conn = (HttpURLConnection) p_w_picpathUrl
.openConnection();
conn.setConnectTimeout(30000);
conn.setReadTimeout(30000);
conn.setInstanceFollowRedirects(true);
InputStream is = conn.getInputStream();
bitmap = BitmapFactory.decodeStream(is);
} catch (Exception ex) {
Log.e("",
"getBitmap catch Exception...\nmessage = "
+ ex.getMessage());
}
return bitmap;
}
@Override
protected void onPostExecute(Bitmap bitmap) { // 下载完后执行的
if (isCancelled()) {
bitmap = null;
}
if (p_w_picpathViewReference != null) {
ImageView p_w_picpathView = p_w_picpathViewReference.get();
if (p_w_picpathView != null && bitmap != null) {
p_w_picpathView.setImageBitmap(bitmap); // 下载完设置p_w_picpathview为刚才下载的bitmap对象
}
}
}
}
}