Android异步下载网络图片(其二:AsyncTask)
在上一节中,我们使用Handler、Thread/Runnable 、URL、HttpURLConnection等等来进行异步下载网络图片。
但是采用这种方式有一些缺点,如下:
- 线程的开销较大,如果每个任务都要创建一个线程,那么程序的效率要低很多。
- 线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。
- 另外,前面已经看到,在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。
那么有没有比较更好好的实现方式呢?这个可以有!它就是AsyncTask
AsyncTask的特点是任务在主UI线程之外运行,而回调方法是在主UI线程中,这就有效地避免了使用Handler带来的麻烦。
AsyncTask定义了三种泛型类型 Params,Progress和Result。- Params 启动任务执行的输入参数。
- Progress 后台任务执行的百分比。
- Result 后台执行任务返回的结果。
当然,使用它还必须覆盖它的一些抽象方法方法
doInBackground(Params...)
执行任务onPostExecute(Result) 返回任务执行的结果,通常更新UI
onProgressUpdate (Progress... values) 进度更新
注意:红色的是必须实现的。
第一步:设计好UI,与上节一样
第二步:也与上节一样。
第三步:主要是实例化AsyncTask,并执行execute(Params)
我们必须继承AsyncTask,并覆盖它的一些方法,我们这里主要是要获取网络图片,并保存为Bitmap,以便UI根据Bitmap来更新的。
那么需要为AsyncTask设置返回的类型参数为String,Integer,Bitmap 类定义如下:
View Codepublic class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {在
doInBackground(Params...) 方法中 ,接受String ....params,返回我们需要的Bitmap.当然我们这里是获取图片Bitmap所以要返回Bitmap
View Code@Overrideprotected Bitmap doInBackground(String... params) {Bitmap bitmap=null;try {URL url = new URL(params[0]);HttpURLConnection con=(HttpURLConnection) url.openConnection();con.setDoInput(true);con.connect();InputStream inputStream=con.getInputStream();bitmap=BitmapFactory.decodeStream(inputStream); inputStream.close();} catch (MalformedURLException e) {e.printStackTrace();}catch (IOException e) {// TODO Auto-generated catch block e.printStackTrace();} return bitmap;}在
onPostExecute(Result) 中是请求获得结果后更新UI部分。你会看到他的参数就是我们类中的类型参数。代码如下:
View Code//执行获得图片数据后,更新UI:显示图片,隐藏进度条 @Overrideprotected void onPostExecute(Bitmap Result){ImageView imgView=(ImageView)this.viewGroup.getChildAt(0);imgView.setImageBitmap(Result);ProgressBar bar=(ProgressBar)this.viewGroup.getChildAt(1);bar.setVisibility(View.GONE);}然后怎么用呢?在UI线程中执行吧:
MyASyncTask yncTask=new MyASyncTask(this,frameLayout);
yncTask.execute(params);运行结果与上节大同小异
Android异步下载网络图片(其二:AsyncTask)相关推荐
- Android异步下载网络图片(其三:ExecutorService)
在第一节中,我们使用Handler.Thread/Runnable .URL.HttpURLConnection等等来进行异步下载网络图片.然后第二节中换了AsyncTask方式.那么这一节我们再应用 ...
- Android异步下载网络图片(其一:Handler)
项目中有时候需要获取网络上的图片,并下载下来到手机客户端显示.怎么做呢? 实现思路是: 1:在UI线程中启动一个线程,让这个线程去下载图片. 2:图片完成下载后发送一个消息去通知UI线程 2:UI线程 ...
- IOS开发基础之异步下载网络图片第1部分
IOS开发基础之异步下载网络图片第1部分 加入ATS // LJAppInfo.h // 37-异步下载网络图片 // Created by 鲁军 on 2021/3/10. #import < ...
- Android开发-下载网络图片并显示到本地
Android下载网络图片的流程是: 发送网络请求->将图片以流的形式下载下来->将流转换为Bitmap并赋给ImageView控件. 注意点 最新的Android系统不可以在主线程上请求 ...
- Android异步下载
概述 实现App常见下载公共 支持通知栏显示 支持 暂停.取消功能,使用Service.AsyncTask实现异步下载.特点简单.实用.方便源码扩展修改 详细 代码下载:http://www.demo ...
- linux异步实现原理,Android异步处理四:AsyncTask的实现原理
分析: 在分析实现流程之前,我们先了解一下AsyncTask有哪些成员变量. privatestaticfinalintCORE_POOL_SIZE =5;//5个核心工作线程 privatestat ...
- android 设置系统壁纸,Android HttpURLConnection下载网络图片设置系统壁纸
需求: 壁纸是url链接,get就能请求到,所以就用get请求到图片,把图片转化为bitmap,然后设置壁纸. 代码: 这里我封装了工具类 package xxxxx.utils; import an ...
- Android HttpURLConnection下载网络图片,设置系统壁纸
需求: 壁纸是url链接,get就能请求到,所以就用get请求到图片,把图片转化为bitmap,然后设置壁纸. 代码: 这里我封装了工具类 package xxxxx.utils;import and ...
- Android 异步获取网络图片并处理图片Out Of Memory 内存溢出问题
测试环境为Adnroid 2.1以上. 1:AndroidManifest.xml 权限配置: 添加互联网访问权限: <uses-permission android:name="an ...
最新文章
- 如何使用 Cockpit 管理你的树莓派
- R语言ggplot2可视化:使用ggplot2按照热力图的方式显示全是分类变量的dataframe数据、并自定义因子(factor)的图例颜色legend
- 英特尔AI芯片首次商用交货!推理性能3.7倍于英伟达T4,年贡献245亿涨250%
- webSocket使用心跳包实现断线重连
- Java NIO学习系列一:Buffer
- 【竞赛相关】南大化院博士刘子腾:跨专业如何做数据竞赛浅谈
- 使用action framework 实现order change时自动发送邮件
- 被面试官问的Android问题难倒了,面试必会
- MySql-Proxy之多路结果集归并
- Android Studio导入项目遇到的问题
- 轮播图高度自适应_干货!弘成教你写轮播图全自动适应封装代码
- linux系统电脑白屏,在Deepin Linux 15.7系统中换桌面后关机界面白屏的解决
- 分析dmp文件使用表空间_R语言使用贝叶斯层次模型进行空间数据分析
- Crypto.com APP上线The Graph(GRT)
- android p正式版一加6,一加6T出厂搭载Android P 将于11月5日发布tokyo hot n0727
- 通过ssh远程连接Ubuntu主机
- Drain基于固定深度解析树
- 求素数/质数 简单Java算法
- 熟悉又陌生的 k8s 字段:finalizers
- C生万物 | 操作符汇总大全【庖丁解牛,精细讲解】
热门文章
- 【Git】Git 版本管理 ( 补充提交版本 git commit --amend | 版本库提取文件 git checkout -- filename | 删除文件 git rm )
- 【C 语言】文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )
- 【Android 安装包优化】WebP 图片格式性能测试 ( 测试 WebP 图片解码速度 | 测试 WebP 图片编码速度 )
- 【鸿蒙 HarmonyOS】UI 组件 ( 进度条 ProgressBar 和 RoundProgressBar 组件 )
- 【Visual Studio 2019】创建 导入 CMake 项目
- LiveGBS国标流媒体-摄像机网页低延时无插件直播实现
- 前方高能 | 容器化应用操作原来可以这样简单
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
- PHPcms 系统简单使用
- 使用stsadm命令部署和激活webpart解决方案