Android异步载入全解析之使用AsyncTask
Android异步载入全解析之使用AsyncTask
概述
AsyncTask初探
AsyncTask參数
AsyncTask <Params, Progress, Result>
- Params: 这个泛型指定的是我们传递给异步任务运行时的參数的类型
- Progress: 这个泛型指定的是我们的异步任务在运行的时候将运行的进度返回给UI线程的參数的类型
- Result: 这个泛型指定的异步任务运行完后返回给UI线程的结果的类型
AsyncTask方法
这种方法在调用之前,我们须要在 doInBackground 方法中
AsyncTask使用
private class ASyncDownloadImage extends AsyncTask<String, Void, Bitmap> { private ImageView imageView;
private String url; public ASyncDownloadImage(ImageView imageView, String url) {
this.imageView = imageView;
this.url = url;
} @Override
protected Bitmap doInBackground(String... params) {
return getBitmapFromUrl(params[0]);
} @Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
if (imageView.getTag().equals(url)) {
imageView.setImageBitmap(bitmap);
}
}
}
这个AsyncTask我们重写了doInBackground用来异步下载图像,重写了onPostExecute来将图像设置到ImageView上。
因此。我们将AsyncTask的三个泛型參数设置为:
AsyncTask<String, Void, Bitmap>
即參数类型为String——url,进度类型——Void 不须要,返回类型——Bitmap 下载的图像。
在设置图像的时候,我们相同须要通过tag来进行推断。
/**
* Using ASyncTask
* @param imageView
* @param url
*/
public void showImageByASync(ImageView imageView, String url) {
ASyncDownloadImage task = new ASyncDownloadImage(imageView, url);
task.execute(url);
}
AsyncTask中有几个地方还是须要注意下的:
- execute方法仅仅能在UI线程中调用
- AsyncTask实例也必须在UI线程中创建
- AsyncTask的抽象方法不要手动去调用。系统自己主动会去管理
- AsyncTask仅仅能运行一次
mImageLoader.showImageByASync(viewHolder.imageView, url);
Android异步载入全解析之使用AsyncTask的更多相关文章
- Android异步载入全解析之IntentService
Android异步载入全解析之IntentService 搞什么IntentService 前面我们说了那么多,异步处理都使用钦定的AsyncTask.再不济也使用的Thread,那么这个Intent ...
- Android异步载入全解析之大图处理
Android异步载入全解析之大图处理 异步载入中很重要的一部分就是对图像的处理,这也是我们前面用异步载入图像做示例的原因. 一方面是由于图像处理不好的话会很占内存,并且easyOOM,还有一方面,图 ...
- Android异步载入全解析之使用多线程
异步载入之使用多线程 初次尝试 异步.异步,事实上说白了就是多任务处理.也就是多线程执行.多线程那就会有各种问题,我们一步步来看.首先.我们创建一个class--ImageLoaderWithoutC ...
- Android异步载入全解析之开篇瞎扯淡
Android异步载入 概述 Android异步载入在Android中使用的很广泛,除了是由于避免在主线程中做网络操作.更是为了避免在显示时由于时间太长而造成ANR,添加显示的流畅性,特别是像List ...
- Android异步载入AsyncTask具体解释
曾看见有人说过.认为非常有道理.分享一下: 技术分为术和道两种: (1)具体做事的方法是术. (2)做事的原理和原则是道. 近期项目发现个重大问题.结果打log跟踪查是AsyncTask导 ...
- Android 异步消息处理机制解析
Android 中的异步消息处理主要由四个部分组成,Message.Handler.MessageQueue.Looper.下面将会对这四个部分进行一下简要的介绍. 1. Message: Messa ...
- Android异步载入学习笔记之四:利用缓存优化网络载入图片及ListView载入优化
假设不做不论什么处理.直接用网络载入图片在网速快的情况下可能没什么不好的感觉.可是假设使用移动流量或是网络不好的时候.问题就来了,要么用户会抱怨流量使用太多.要么抱怨图片载入太慢.如论从哪个角度出发, ...
- 转:android异步任务设计思详解(AsyncTask)
这里说有设计思想是我根据查看Android源代码提炼出来的代码逻辑,所以不会跟Google工程师的原始设计思想100%符合(也有可能是0%),但是本文一定可以帮助你理解AsyncTask,也可能有一些 ...
- Android系统启动过程全解析
Android系统是一款基于Linux的移动操作系统,那么Android是如何启动起来的呢?本文就详细阐述Android系统的启动过程. 从内核之上,我们首先应该从文件系统的init开始,因为 ini ...
随机推荐
- Win7梦幻桌面字体有问题怎么办
1:首先,下载我提供的压缩文件,解压"Win7中文界面梦幻桌面补丁",得到若干文件,这时可能需要管理员权限,详细的压缩包里有说明. 2: 然后在桌面上单击右键,可以发 ...
- AFN检測网络情况
问: I'm a bit lost on AFNetorking's Reachability and haven't found a lot of good information out ther ...
- Jeewx 捷微管家操作配置文档(开源版本号)
1.1.1. 公众帐号管理 (1)捷微是第三方微信公众帐号管理平台,使用本平台前,请自行注冊申请微信公众帐号,操作流程请參照百度经验[怎样注冊微信公众帐号]: http://jingyan.baid ...
- mongo: 改
语法:db.CollectionName.upadte(查询表达式,新值,选项); 查询表达式:定位哪些列是要被修改的列(即使查询表达式能命中多行,默认也只改一行,如果想改多行,可以用multi选项, ...
- E - Hangover(1.4.1)
Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit cid=1006#sta ...
- 搭建nginx服务器和直播流媒体服务器
1.nginx简单说明 ① Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强. ...
- Android Studio 使用笔记:工具窗口浮动与布局恢复
Android Studio 的工具窗口都可以变成浮动窗口,如果有多个显示器的话,这种模式非常方便.方法如下: 然后就像下图那样,可以拖拽了.如果你不小心关了,没有关系.再次点击工具栏,浮动窗口就回显 ...
- Google Code Jam 2014 资格赛:Problem C. Minesweeper Master
Problem Minesweeper is a computer game that became popular in the 1980s, and is still included in so ...
- CentOS 源码安装svn
一. 下载依赖包 1. apr源码包 http://mirrors.tuna.tsinghua.edu.cn/apache//apr/apr-1.5.2.tar.gz 2. apr-util源码包 h ...
- git学习之创建版本库(三)
创建版本库 什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以 ...