Android异步下载网络图片(其三:ExecutorService)

本文探讨了在Android应用中使用Java并发编程库java.util.concurrent实现并发下载网络图片的方法,包括ExecutorService类的动态线程池管理和常用线程池类型的新FixedThreadPool和newCachedThreadPool。通过实际代码示例展示了如何利用这些工具高效地处理并发任务,特别是在ListView中展示多个项的场景,以及并发下载图片的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

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

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

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

我们知道这些是用来处理并发任务的,当然我们Demo只是请求一张图片而已,并不能体现并发,但是假设我们有一个ListView,里面每一项都需要一张网络图片显示呢?那么并发性就可以体现出来了:多个线程并发从网络下载图片。当然这个版本不会使用listView显示多个项图片,以后做个版本吧!研究下。

 思路是这样的:

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;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值