Android编程学习之异步加载图片的方法

2019-12-10 19:58:56于海丽
  • if (bitmap != null)   imageView.setImageBitmap(bitmap);  
  • else {// 如果手机内存缓存中没有图片,则调用任务队列,并先设置默认图片   queuePhoto(url, activity, imageView);  
  • imageView.setImageResource(stub_id);   }  
  • }   private void queuePhoto(String url, Activity activity, ImageView imageView) {  
  • // 这ImageView可能之前被用于其它图像。所以可能会有一些旧的任务队列。我们需要清理掉它们。   picturesQueue.Clean(imageView);  
  • PictureToLoad p = new PictureToLoad(url, imageView);   synchronized (picturesQueue.picturesToLoad) {  
  • picturesQueue.picturesToLoad.push(p);   picturesQueue.picturesToLoad.notifyAll();  
  • }   // 如果这个线程还没有启动,则启动线程  
  • if (pictureLoaderThread.getState() == Thread.State.NEW)   pictureLoaderThread.start();  
  • }   /**  
  • * 根据url获取相应的图片的Bitmap   *  
  • * @param url   * @return  
  • */  private Bitmap getBitmap(String url) {  
  • File f = fileCache.getFile(url);   // 从SD卡缓存中获取  
  • Bitmap b = decodeFile(f);   if (b != null)  
  • return b;   // 否则从网络中获取  
  • try {   Bitmap bitmap = null;  
  • URL imageUrl = new URL(url);   HttpURLConnection conn = (HttpURLConnection) imageUrl  
  • .openConnection();   conn.setConnectTimeout(30000);  
  • conn.setReadTimeout(30000);   InputStream is = conn.getInputStream();  
  • OutputStream os = new FileOutputStream(f);   // 将图片写到sd卡目录中去  
  • ImageUtil.CopyStream(is, os);   os.close();  
  • bitmap = decodeFile(f);   return bitmap;  
  • } catch (Exception ex) {   ex.printStackTrace();