Android异步下载网络图片(其二)
来源:互联网 发布:网络维护工具套装 编辑:程序博客网 时间:2024/05/20 21:47
在上一节中,我们使用Handler、Thread/Runnable 、URL、HttpURLConnection等等来进行异步下载网络图片。
但是采用这种方式有一些缺点,如下:
那么有没有比较更好好的实现方式呢?这个可以有!它就是AsyncTask
AsyncTask的特点是任务在主UI线程之外运行,而回调方法是在主UI线程中,这就有效地避免了使用Handler带来的麻烦。
- Params 启动任务执行的输入参数。
- Progress 后台任务执行的百分比。
- Result 后台执行任务返回的结果。
当然,使用它还必须覆盖它的一些抽象方法方法
doInBackground(Params...)
执行任务
onPostExecute(Result) 返回任务执行的结果,通常更新UI
onProgressUpdate (Progress... values) 进度更新
注意:红色的是必须实现的。
第一步:设计好UI,与上节一样
第二步:也与上节一样。
第三步:主要是实例化AsyncTask,并执行execute(Params)
我们必须继承AsyncTask,并覆盖它的一些方法,我们这里主要是要获取网络图片,并保存为Bitmap,以便UI根据Bitmap来更新的。
那么需要为AsyncTask设置返回的类型参数为String,Integer,Bitmap 类定义如下:
public class MyASyncTask extends AsyncTask<String, Integer, Bitmap> {
在doInBackground(Params...) 方法中 ,接受String ....params,返回我们需要的Bitmap.当然我们这里是获取图片Bitmap所以要返回Bitmap
如果你返回的需要是String或者其他复杂类型时候,需要修改类的定义参数类型为你需要返回的类型,当然接受参数也是根据你的请求需要改变。
@Override protected 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部分。你会看到他的参数就是我们类中的类型参数。代码如下:
//执行获得图片数据后,更新UI:显示图片,隐藏进度条 @Override protected 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异步下载网络图片(其二)
- android异步下载网络图片(其二)
- Android异步下载网络图片(其二)
- android异步下载网络图片(其二)
- Android异步下载网络图片(其二)
- Android异步下载网络图片(其二)
- Android异步下载网络图片(其二)
- Android异步下载网络图片(其二AsyncTask)
- Android异步下载网络图片(其二:AsyncTask)
- Android异步下载网络图片(其二:AsyncTask)
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其一)
- Android异步下载网络图片(3)
- android异步下载网络图片(其一)
- Android异步下载网络图片(其一)
- Android异步下载网络图片(其一)
- Oracle中的几个概念——db_name db_domain instance SID
- Android异步下载网络图片(其一)
- Java调用XML的方法之DocumentBuilderFactory
- ios的@property属性和@synthesize属性
- EC之Implementations
- Android异步下载网络图片(其二)
- 下拉刷新ListView的实现原理
- 实现DropDownList 无刷新的联动效果
- 移植SlidingMenu Android library和安装example出现的问题解决
- BZOJ 3240([Noi2013]矩阵游戏-费马小定理【矩阵推论】-%*s-快速读入)
- InputStream读取数据
- c语言简单的链表
- ContentProvider 对SQLite数据共享
- hdu 4352 数位DP