Android手机开发专题博客

Android手机开发专题博客,为您精选安卓手机开发教程,助您手机开发愉快!

公告信息
欢迎光临Android手机开发专题博客,祝您手机开发愉快!
文章档案

Android实现图片异步下载3

Android处理并发任务时,一般只是请求一张图片而已,并不能体现并发,但是假设我们有一个ListView,里面每一项都需要一张网络图片显示呢?那么并发性就可以体现出来了:多个线程并发从网络下载图片。

在第一节中,我们使用Handler、Thread/Runnable 、URL、HttpURLConnection等等来进行异步下载网络图片。然后第二节中换了AsyncTask方式。那么这一节我们再应用其他方式,这个方式与第一节有点雷同,感觉走了一圈回到原地,只是风景更加美丽。人生很多时候也是如此,从NULL中来再回到NULL中。

那么它是谁呢?java.util.concurrent

java.util.concurrent 是在并发编程中很常用的实用工具类。

ExecutorService类:具有服务生命周期的Executors。

Executors 类:执行器,将为你管理Thread 对象。

 思路是这样的:

1:动态的创建N个线程,防在线程池中。

2:系统从线程池中取出一个线程投入执行,线程池中若没有线程可用,其他任务只有先等待了,直到有新线程释放,才调用。

如下有几个方法可以动态的指定多少个线程。

newFixedThreadPool(int nThreads)  指定线程个数

newCachedThreadPool()                 系统为每个任务都建立一个线程

下面可以实现并发下载数据

case R.id.btnThress:
progress.setVisibility(View.VISIBLE);
final Handler newhandler=new Handler();
executorService.submit(
new Runnable(){
@Override
public void run() {
try {
URL newurl
= new URL(params);
HttpURLConnection conn
= (HttpURLConnection)newurl.openConnection();
conn.setDoInput(
true);
conn.connect();
InputStream inputStream
=conn.getInputStream();
bitmap
= BitmapFactory.decodeStream(inputStream);
newhandler.post(
new Runnable(){
@Override
public void run() {
ImageView view
=(ImageView)frameLayout.findViewById(R.id.image);
view.setImageBitmap(bitmap);
}
});
}
catch (MalformedURLException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
}

});
break;

运行结果为:

新浪微博粉丝精灵,刷粉丝、刷评论、刷转发、企业商家微博营销必备工具"

2011/9/11 17:57:16 | android开发教程 | |

#2lxj[220.112.2.*]2012/7/26 14:55:10
楼主,能否发份源码给我?邮箱:xj179@163.com
#1blackspot2012/6/5 16:09:25
mark
  • 发表评论