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

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

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

正在回答

2 回答

一直是多线程,在加载啊!

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

0 回复 有任何疑惑可以回复我~
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必学-异步加载
  • 参与学习       50616    人
  • 解答问题       333    个

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

进入课程

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

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号