AsyncTask:

1.这是一种相比Handler更轻量级的处理异步任务的工具类

2.它和Handler类一样,都是为了不影响主线程(UI)而使用的((注:UI的更新只能在主线程中完成)

3.这个工具类提供了三个泛型的参数:

params:启动或执行任务的输入参数,例如:HTTP请求的URL

Progress:后台任务执行的百分比

Result:后台执行任务最终返回的结果,比如String

使用AsyncTask最少要重写这两个方法:

1.doInBackground(params··)

  此方法在后台执行,比较耗时的操作都可以放在这里执行;

  这里不能直接操作UI(主线程),此方法在后台线程执行;完成任务的主要工作,通常需要很长世间;

  在此执行过程中可以调用publishProgress()来更新工作进度。

2.onPostExecute(Result)

  相当于Handler处理UI的方式;

  可以使用在doInBackground得到的结果处理和操作UI;

  此方法在主线程中执行,任务执行的结果作为参数的返回。

如果有必要还可以重写一下三个方法:

onProgressUpdate();

  这里可以使用进度条来显示任务执行的进度情况,用来增加用户体验。(此方法在主线程中执行)

onPreExecute();

  这里是用户调用Execute的接口,当任务执行之前开始调用此方法;

  可以在这里显示进度对话框

onCancelled();

  此方法是用户调用取消的时候,自动调用的方法

使用AsyncTask类应当注意的地方:

1.此类的实例必须在主线程(UI交互)

2.execute方法必须在UIthread中调用;

3.不能手动调用自己重写的onPreExecute()等方法

4.该任务只能执行一次,多次调用会出现异常

一般情况下AsuncTask实例的运行过程:

1.AsyncTask.execute(URL)>>>onPreExecute()>>>doInBackground(String... params)>>>onPostExecute(String s)>>>ShowInTextView!

文字解释:使用execute()方法传入一个URL,onPreEXEcute()在执行doInBackground(String···params)之前先行加载,doInBackground(String···params)方法接收到的URL以数据方式存放在params中,所以可以使用一下步骤来实现读取URL数据,并从网络上获取数据的步骤,

具体的代码:

  URL Url = new URL(params[0]);
URLConnection connection = Url.openConnection();
InputStream inputStream = connection.getInputStream();
InputStreamReader ISR = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(ISR);
String line;
StringBuilder builder = new StringBuilder();
while ((line = bufferedReader.readLine())!=null){
  builder.append(line);
}
bufferedReader.close();
inputStream.close();
return builder.toString();
//这里返回的String数据内容,会被onPostExecute(String s)接收,其中的内容就保存在S中
//可用重写其方法,来将从网页获得的数据进行处理,比如说在一个TextView中显示
@Override
protected void onPostExecute(String s) {
tvShow.setText(s);
super.onPostExecute(s);
}
//若是不在这个方法里添加将数据内容发布的代码,就会执行系统中的原始代码,
//但是在源码中,onPostExecute(String s)是一个抽象的方法,还未实现,所以若不重写
//onPostExecute(String s)将不执行任何操作
//并且经过查看源代码,这些重写的方法在源代码中都是抽象状态,没有任何的执行内容!

2.onProgressUpdate(Void... values)可以在任务运行中调用,用来发布任务进度,提升用户体验

  

使用AsyncTask类实现简单的异步处理操作的更多相关文章

  1. AsyncTask和Handler两种异步方式的实现和区别比较

    1  AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以 ...

  2. android开发之路12(android四大组件&Fragment&AsyncTask类)

    一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...

  3. AsyncTask类

    1.定义         异步任务类,在类中实现异步操作,并提供回调方法反馈当前异步执行的程度,最后反馈 的结果提供给UI主线程.         <1>Android线程         ...

  4. Android的AsyncTask类的解读

    国庆节放假.搞了半个月都没有上班了,coding的时候一点都不在状态,本来这篇文章是在国庆节前写完的,可是由于自己的懒 惰,导致延期到国庆节,哎,这种习惯真心不好呀...不多说了以下来进入正题 之前我 ...

  5. 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能

    说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...

  6. 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类

    文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...

  7. 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)

    前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...

  8. DataAccess通用数据库访问类,简单易用,功能强悍

    以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...

  9. java中Color类的简单总结

    java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 publi ...

随机推荐

  1. ngnix——FastCGI 相关参数调优

    当 LNMP 组合工作时,首先是用户通过浏览器输入域名请求 Nginx Web 服务,如果请求的是静态资源,则由 Nginx 解析返回给用户:如果是动态请求(如 PHP),那么 Nginx 就会把它通 ...

  2. Fiddler常用命令

    几个常用的命令行方法使用: 查找对应响应码的数据包或请求类型的数据包: 输入“=post”将选择post的数据包并用蓝色底标色 输入:=502 查找服务器返回是图片类型的请求 输入 select im ...

  3. JPA问题汇总

    JPATools生成的实体类对大小写敏感.如果一个数据库中大小写混乱,生成的实体类也会大小写都有.这种情况会导致HibernateSQL语句查询,每次都会查询第一个大小写字段,所以需要加映射关系.@C ...

  4. Java学习笔记42(数据库连接池 druid连接池)

    druid连接池: 是阿里的连接池,druid的稳定性及效率都很高,目前用的比较广,所以建议开发过程中尽量用druid连接池(支持国产最重要) druid连接池也需要配置文件,配置文件必须是prope ...

  5. 详解Makefile 函数的语法与使用 (转)

    使用函数: 在Makefile中可以使用函数来处理变量,从而让我们的命令或是规则更为的灵活和具有智能.make所支持的函数也不算很多,不过已经足够我们的操作了.函数调用后,函数的返回值可以当做变量来使 ...

  6. java基础(4)继承和多态

    1 继承 1.1  继承概述 继承要解决的问题:共性抽取 1.2 继承的格式 class 父类 { ... } class 子类 extends 父类 { ... } 1.3 继承中成员变量的特点(变 ...

  7. 样本失衡会对SVM的影响

    假设正类样本远多于负类 1.线性可分的情况 假设真实数据集如下: 由于负类样本量太少,可能会出现下面这种情况 使得分隔超平面偏向负类.严格意义上,这种样本不平衡不是因为样本数量的问题,而是因为边界点发 ...

  8. 《从Lucene到Elasticsearch:全文检索实战》学习笔记三

    今天我给大家讲讲倒排索引. 索引是构成搜索引擎的核心技术之一,它在日常生活中是非常常见的,比如我看一本书的时候,我首先会看书的目录,通过目录可以快速定位到具体章节的页码,加快对内容的查询速度. 文档通 ...

  9. 2018.4.28 kvm虚拟机管理

    创建虚拟机: virt-install --name wj-v1.4.1.0411 --vcpus=2 --memory=2048 --disk path=/home/wj/os/osgwV1.4.1 ...

  10. linux下查询java进程以及杀掉其进程

    1.使用命令: ps -ef|grep java 查询到到自己想要kill掉的进程id 2.使用命令: kill -9 id(这里的id为你上一步查找到的id)