在一个listview列表中加载图片,我开始是这样做的,一张图片就使用创建一个线程加载,再通过把图片的加载地址做为一个key放到一个map集合中这样来控制同一张图片在没加载完的时候再次创建线程,但是这样子问题就来了。当我快速滑动列表的时候,这样子就会加载一些新的不同地址的图片,但是之前加载的图片线程又还没有加载完,这样子怎么样才可以把没加载完成的线程停止掉。

解决方案 »

  1.   

    这样做太消耗CPU和内存了,
    一般加载listView 图片 一个线程就可以了
    类似这样的。
    new Thread(){
       public void run(){
          for (String url: imgURLs) {
               Bitmap bitmap = downloadImage(url);
               if (bitmap != null) {
                     _map.put(url,bitmap); //这个做缓存的,下载过的就不用再下载了。
                     // ui 线程更新图片到ListView
                     Message msg = new Message(); 
                     msg.what = 1;
                     msg.obj = bitmap;
                     handler.sendMessage(msg);
               }
          }
       }
    }.start();
      

  2.   

    线程无法立刻停止,JVM回收垃圾的时候有一个过程,如果不断创建线程 这样的APP容易耗电,耗内存。
    个人认为 一个线程,或者2个线程就够了。除非网络环境很差否则一般还是很快地获取到图片内容的。
    要想停止线程只能强制调用stop方法,增加标志位。 不过都不能立即停止。