异步加载怎么开启多线程?
我发现一个问题,使用异步加载图片是单线程,不能同时加载多张图片,而且必须要等前一个图片加载完后才能开始加载后面一张,影响速度;而用多线程的话,多张图片基本上都是同时加载出来的,速度效率快很多。那么问题来了,在异步加载中怎么使用多线程?
我发现一个问题,使用异步加载图片是单线程,不能同时加载多张图片,而且必须要等前一个图片加载完后才能开始加载后面一张,影响速度;而用多线程的话,多张图片基本上都是同时加载出来的,速度效率快很多。那么问题来了,在异步加载中怎么使用多线程?
2016-09-26
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(); }
这是老师的代码。
举报