@Override
 public void handleMessage(Message msg) {
   if (msg.what == 0) {
     if (map.containsKey(mUrl)) {
       ArrayList<ImageObj> list = map.get(mUrl);
       map.remove(mUrl);
       try {
         for (ImageObj imageObj : list) {
           if (getBitmap() != null
               && imageObj.imageView.getTag(R.layout.main).equals(mUrl)) {
             if (imageObj.type == 1) {
               imageObj.imageView.setImageBitmap(findScaleBitmap());
             } else {
               imageObj.imageView.setImageBitmap(getBitmap());
             }
           }
         }
       } catch (Exception e) {
         e.printStackTrace();
       }
     }
   } else if (msg.what == 1) {
     LogInfo.LogOut(
         "positin="
             + pos
             + "  bitMap="
             + getBitmap()
             + " bitmapReference="
             + bitmapReference);
     mImageView.setImageBitmap(getBitmap());
   }
 };
  private void loadImgBy(String url, ImageView v, int defaultDrawable) {
    mImageView = v;
    mUrl = url;
    if (TextUtils.isEmpty(url)) {
      mImageView.setTag(R.layout.main, mUrl);
      mImageView.setImageResource(defaultDrawable);
      return;
    }
    File cacheDir = new File(Configs.tlcyImagePath);
    String urlConvert = MD5.md5Upper(mUrl);
    File file = new File(cacheDir, urlConvert);
    if (file.exists()) {
      if (mType == 1) {
        mImageView.setImageBitmap(findScaleBitmap());
      } else {
        mImageView.setImageBitmap(loadImgLocal(mUrl));
      }
      /*
       * new Thread(){ public void run() { bitmapReference = new
       * SoftReference<Bitmap>(getBitmapFromLocal(mUrl)); if (mType == 1)
       * { bitmapReference = new SoftReference<Bitmap>(findScaleBitmap());
       * } mImageView.setTag(R.layout.main, mUrl);
       * LogInfo.LogOut("file.exists.positin="
       * +pos+"  bitMap="+getBitmap()+
       * " bitmapReference="+bitmapReference);
       * loaderImageHandler.sendEmptyMessage(1); }; }.start();
       */
    } else {
      ImageObj obj = new ImageObj();
      obj.imageView = mImageView;
      obj.imageView.setTag(R.layout.main, mUrl);
      obj.imageView.setImageResource(defaultDrawable);
      obj.type = mType;
      if (map.containsKey(mUrl)) { // 防止重复请求同一张图片
        map.get(mUrl).add(obj);
        LogInfo.LogOut(
            "list", "ImageLoader.igrThread\t\tmImageView=" + mImageView + "\t\turl=" + mUrl);
        return;
      } else {
        ArrayList<ImageObj> list = new ArrayList<ImageObj>();
        list.add(obj);
        map.put(mUrl, list);
      }
      new Thread() {
        @Override
        public void run() {
          try {
            HttpURLConnection conn = null;
            InputStream is = null;
            try {
              if (!mAllowLoad) {
                LogInfo.LogOut("list", "-----------------------prepare to load");
                synchronized (lock) {
                  try {
                    lock.wait();
                  } catch (InterruptedException e) {
                    e.printStackTrace();
                  }
                }
              }
              if (mAllowLoad && (firstLoad || (pos <= mStopLoadLimit && pos >= mStartLoadLimit))
                  || pos == -1) {
                LogInfo.LogOut(
                    "list",
                    "ImageLoader.thread="
                        + this.getName()
                        + "\t\tmImageView="
                        + mImageView
                        + "\t\turl="
                        + mUrl);
                URL tempUrl = new URL(mUrl);

                conn = (HttpURLConnection) tempUrl.openConnection();
                conn.setDoInput(true);
                LogInfo.LogOut("list", "--conn.getResponseCode() = " + conn.getResponseCode());
                if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                  is = conn.getInputStream();
                  byte buffer[] = new byte[1024];
                  int len;
                  ByteArrayOutputStream swapStream = new ByteArrayOutputStream();
                  while ((len = is.read(buffer)) != -1) {
                    swapStream.write(buffer, 0, len);
                  }
                  byte[] swapArray = swapStream.toByteArray();
                  Bitmap bitmap = BitmapFactory.decodeByteArray(swapArray, 0, swapArray.length);
                  swapStream.close();
                  bitmapReference = new SoftReference<Bitmap>(bitmap);
                  saveBitmapToLocal(mUrl, bitmap);
                }
              } else {
                LogInfo.LogOut("igrPosition=" + pos);
              }
              if (getBitmap() != null) {
                if (mType == 1 && getBitmap().getHeight() > 0) {
                  findScaleBitmap();
                  // bitmapReference = new
                  // SoftReference<Bitmap>(findScaleBitmap());
                }
                loaderImageHandler.sendEmptyMessage(0);
              } else {
                map.remove(mUrl);
              }

            } catch (Exception e) {
              map.remove(mUrl);
              e.printStackTrace();
            } finally {
              if (is != null) {
                try {
                  is.close();
                } catch (IOException e) {
                }
              }
              if (conn != null) {
                conn.disconnect();
              }
            }
          } catch (OutOfMemoryError e) {
            System.gc();
          }
        }
      }.start();
    }
  }