为了账号安全,请及时绑定邮箱和手机立即绑定

异步加载怎么开启多线程?

我发现一个问题,使用异步加载图片是单线程,不能同时加载多张图片,而且必须要等前一个图片加载完后才能开始加载后面一张,影响速度;而用多线程的话,多张图片基本上都是同时加载出来的,速度效率快很多。那么问题来了,在异步加载中怎么使用多线程?

正在回答

1 回答

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();
}


这是老师的代码。

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android必学-异步加载
  • 参与学习       50627    人
  • 解答问题       311    个

了解Android中的异步加载处理方法,这是面试问的最多的知识点

进入课程

异步加载怎么开启多线程?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信