异步加载怎么开启多线程?
我发现一个问题,使用异步加载图片是单线程,不能同时加载多张图片,而且必须要等前一个图片加载完后才能开始加载后面一张,影响速度;而用多线程的话,多张图片基本上都是同时加载出来的,速度效率快很多。那么问题来了,在异步加载中怎么使用多线程?
我发现一个问题,使用异步加载图片是单线程,不能同时加载多张图片,而且必须要等前一个图片加载完后才能开始加载后面一张,影响速度;而用多线程的话,多张图片基本上都是同时加载出来的,速度效率快很多。那么问题来了,在异步加载中怎么使用多线程?
2016-06-21
一直是多线程,在加载啊!
for (int i = start; i < end; i++){ 《====这里是for循环重复开启多个task
String url = NewsAdapter.URLS[i];
//由缓存中得到bitmap
Bitmap bitmap = getBitmapFormCache(url);
if (bitmap == null){
//当bitmap为空时,由AsyncTask进行加载,并在onPostExecute()方法中setImageBitmap
NewsAsyncTask task = new NewsAsyncTask(url);
task.execute(url);
mAsyncTask.add(task);
} else {
//当bitmap不为空时,直接进行setImageBitmap
ImageView imageView = (ImageView) mListView.findViewWithTag(url);
imageView.setImageBitmap(bitmap);
}
}
public View getView(int position, View convertView, ViewGroup parent) { String url = mData.get(position); ViewHolder viewHolder = null; if (convertView == null) { viewHolder = new ViewHolder(); convertView = mInflater.inflate(R.layout.listview_item, null); viewHolder.imageView = (ImageView) convertView.findViewById(R.id.iv_lv_item); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.imageView.setTag(url); viewHolder.imageView.setImageResource(R.drawable.ic_launcher); mImageLoader.showImageByThread(viewHolder.imageView, url); return convertView; } private class ImgHolder { public Bitmap bitmap; public ImageView imageView; public String url; public ImgHolder(ImageView iv, Bitmap bm,String url) { this.imageView = iv; this.bitmap = bm; this.url = url; } }
public void showImageByThread(final ImageView imageView, final String url) {
mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
ImgHolder holder = (ImgHolder) msg.obj;
if (holder.imageView.getTag().equals(holder.url)) {
holder.imageView.setImageBitmap(holder.bitmap);
}
}
};
new Thread() {
@Override
public void run() {
Bitmap bitmap = getBitmapFromUrl(url);
Message message = Message.obtain();
message.obj = new ImgHolder(imageView, bitmap, url);
mHandler.sendMessage(message);
}
}.start();
}
举报