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