Android中AsyncTask使用
一、AsyncTask的定义:
AsyncTask是一种轻量级的异步任务类,它可以在线程池中执行后台任务,然后把执行的进度和最终结果传递给主线程,并在主线程更新UI。
从实现上来说,AsyncTask封装了Thread和Handler,通过AsyncTask可以很方便执行后台任务以及在主线程中访问UI。
AsyncTask是一个抽象的泛型类,它提供了Params、Progress和Result这三个泛型参数
public abstract class AsyncTask<Params,Progress,Result>
AsyncTask三个泛型参数:
》Params,任务的输入参数类型;
》Progress,任务执行进度的参数类型。
》Result,任务返回结果的参数类型。
如果AsyncTask确实不需要传递具体的参数,那么这三个泛型参数可以用Void来代替。
二、AsyncTask的4个核心方法:
1、onPreExecute()
在任务开始后立即调用,在UI线程执行。这一步通常用于设置任务,例如在用户界面中初始化进度条。
2、doInBackground(Params...)
在后台线程池中执行,可能会花费很长时间;可以通过publishProgress方法来更行任务的进度,publishProgress方法会调用onProgressUpdate方法;此方法还需要返回结果给onPostExecute方法。
3、onProgressUpdate(Progress...)
在UI线程上执行。这种方法是用来显示用户进度界面,后台进程仍在执行。例如,它可用于显示一个进度条或在文本中显示日志。
4、onPostExecute(Result)
在UI线程上执行。后台进程的结果被传递到这一步作为参数。
常用的写法如下:
class MyTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
//执行异步任务
int n = 10;
//调用publishProgress公布进度,最后onProgressUpdate方法将被执行
publishProgress(n);
Thread.sleep(500);
return null;
}
@Override
protected void onPostExecute(String result) {
//更新UI,显示结果
}
@Override
protected void onProgressUpdate(Integer... values) {
//更新进度信息
}
任务调用的代码:
new MyTask().execute();//执行任务
三、AsyncTask的规则:
1、AsyncTask实例必须在UI线程中创建。
2、execute(Params... params)方法必须在UI线程中调用。
3、不要手动调用onPreExecute,doInBackground,onProgressUpdate,onPostExecute这些方法
4、一个AsyncTask实例只能执行一次(只能调用一次execute方法),如果执行第二次将会抛出异常
Android中AsyncTask使用的更多相关文章
- Android中AsyncTask异步
今天我们学习了 AsyncTack, 这是一个异步任务. 那么这个异步任务可以干什么呢? 因为只有UI线程,即主线程可以对控件进行更新操作.好处是保证UI稳定性,避免多线程对UI同时操作. 同时要把耗 ...
- Android中AsyncTask的使用 (包含文件的下载与存储)
今天看到大神写的相关详解Android中AsyncTask的使用,真的很是佩服,下面我将学习到的AsynTask知识运用到项目中,其中也涉及一些文件的下载与存储到本地 啥都不说了,直接上代码,我将对其 ...
- Android中AsyncTask使用具体解释
在Android中我们能够通过Thread+Handler实现多线程通信.一种经典的使用场景是:在新线程中进行耗时操作.当任务完毕后通过Handler向主线程发送Message.这样主线程的Handl ...
- 详解Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式需要为每一个任务创建一个新的线程,任务完成后通过Handler实例向UI线程发送消息,完成界面的更 ...
- 具体解释Android中AsyncTask的使用
在Android中实现异步任务机制有两种方式,Handler和AsyncTask. Handler模式须要为每个任务创建一个新的线程,任务完毕后通过Handler实例向UI线程发送消息,完毕界面的更新 ...
- Android中AsyncTask的简单用法 .
在开发Android应用时必须遵守单线程模型的原则: Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行.在单线程模型中始终要记住两条法则: 1. 不要阻塞UI线程 2. 确保只 ...
- Android中AsyncTask的使用
原文 https://blog.csdn.net/liuhe688/article/details/6532519 在Android中实现异步任务机制有两种方式,Handler和AsyncTask. ...
- android中asynctask的使用实例
参考此blog写的非常的好http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html MainActivity.java imp ...
- Android笔记(三十五) Android中AsyncTask
AsyncTask<Params,Progress,Result> 是一个抽象类,通常继承这个抽象类需要指定如下几个泛型参数: 1. Params :启动任务时出入参数的类型 2. P ...
- 并发编程之Android中AsyncTask使用详解(四)
更多Android高级架构进阶视频免费学习请点击:[https://space.bilibili.com/474380680] 在Android中我们可以通过Thread+Handler实现多线程通信 ...
随机推荐
- 转载:postgresql分区与优化
--对于分区表constraint_exclusion 这个参数需要配置为partition或on postgres=# show constraint_exclusion ; constraint_ ...
- Tomcat SSL的安装及配置中遇到问题
配置tomcat服务器利用SSL进行加密. 一.生成密钥库 具体生成方式就不讲了,tomcat支持的keystore的格式有JKS,PKCS11和PKCS12 JKS是jdk /bin目录下keyto ...
- redirect()重新定向·
- JVM参数OmitStackTraceInFastThrow:不打印NullPointerException异常堆栈
查看线上日志,遇到一个诡异的问题,就是系统大量空指针的异常,但是没有打印堆栈,导致不方便定位问题. 经过一番代码调试,确定并非程序代码问题.没有线索之后,从Google找到了答案:是因为在server ...
- 关于 Mybatis 的Invalid bound statement (not found):错误
今天遇到一个特别奇怪的问题,最后发现是自己对mybatis的学习还有待提高 返回类型可以用resultType,也可以用resultMap resultType是直接表示返回类型的,而resultMa ...
- [Linux]Linux系统调用列表
本文列出了大部分常见的Linux系统调用,并附有简要中文说明. 以下是Linux系统调用的一个列表,包含了大部分常用系统调用和由系统调用派生出的的函数.这可能是你在互联网上所能看到的唯一一篇中文注释的 ...
- Xcode常用快捷键(持续更新-20160811)
前言 专门花时间记Xcode快捷键,我觉得没必要,一时记住,不久又会忘记. 用到才记. Xcode常用快捷键 新建 shift + cmd + n 新建项目 cmd + n ...
- sql server 中不同服务器上的数据库中表怎么互导数据
--创建一个链接 EXEC sp_addlinkedserver 'OtherServerDb','','SQLOLEDB','192.168.12.101' --第一个参数是给远程的服务器起的别名 ...
- js未定义判断
if (typeof(homeType) == 'undefined') { //..... //..... } typeof函数判断,如果未定义的就会返回undefined,注意undefined ...
- Win10 UWP vs add github
vs github 插件 教程 官方教程 点击查看存储库,跳转到 DemoHttp for github