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. Bitmap每个像素值由指定的掩码决定

    bBitmap每个像素值由指定的掩码决定 写了一个小工具来转换Bitmap彩色图片的不同位数. 程序的逻辑是拼接: Bitmap文件头 + Bitmap信息头 + Bitmap数据 在RGB888转换 ...

  2. 实验楼 MySQL 基础课程 挑战:搭建一个简易的成绩管理系统的数据库

    传送门:https://www.shiyanlou.com/courses/running 介绍 现需要构建一个简易的成绩管理系统的数据库,来记录几门课程的学生成绩.数据库中有三张表分别用于记录学生信 ...

  3. uboot kernel 博客

    https://blog.csdn.net/zqixiao_09/ https://home.cnblogs.com/u/lifexy/ https://blog.csdn.net/chenliang ...

  4. Java实现带logo的二维码

    Java实现带logo的二维码 二维码应用到生活的各个方面,会用代码实现二维码,我想一定是一项加分的技能.好了,我们来一起实现一下吧. 我们实现的二维码是基于QR Code的标准的,QR Code是由 ...

  5. Git图形化界面客户端

    Git图形化界面客户端大汇总 文,还在不断更新,网上搜到的同名文章都是未经同意就从这里复制过去的) 一.TortoiseGit - The coolest Interface to Git Versi ...

  6. hnsdfz -- 6.19 -- day4

    感觉还好…… 暴力分挂了很多不知道为什么…… 听说今天出题人hsh很劲…… c题正解是个奇怪的知识点…… 恩总的来说今天的节奏依旧很散(大课间去围观sdfz跑操了233 暴力分都写了但是似乎没有尝试脑 ...

  7. day 12

    一,什么是装饰器? 装饰器本质上就是一个python函数,他可以让其他函数在不需要做任何代码变动的前提下,增加额外的功能,装饰器的返回值也是一个函数对象. 装饰器的应用场景:比如插入日志,性能测试,事 ...

  8. java fail-fast和fail-safe

    快速失败(fail—fast) 在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(如增加.删除等),则会抛出Concurrent Modification Exception. ...

  9. maya中的顶点平滑算法(vertex smooth algorithm)

    继上文继续写.有了顶点迭代器之后就可以利用MItMeshVertex类的getConnectedVertices方法来获取相连点并代入平滑算法. 选择什么样的平滑算法呢?本人比较懒,直接打开了计算机图 ...

  10. Unix/Linux进程间通信

    一,Linux下进程间通信的几种主要手段简介: 1,管道(Pipe)及有名管道(named pipe) 管道可用于具有亲缘关系进程间的通信 有名管道克服了管道没有名字的限制,因此,除具有管道所具有的功 ...