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. python自学第7天,函数,参数

    函数:逻辑结构化和过程化的一种编程方法 面向对象--->类 class 面向过程--->过程 def 函数编程--->函数def import time def logger(): ...

  2. .NET并行计算和并发4-Thread-Relative Static Fields and Data Slots

    Thread Local Storage: Thread-Relative Static Fields and Data Slots 文章摘自msdn library官方文档 可以使用托管线程本地存储 ...

  3. HttpURLConnection与HttpClient浅析

    转自:https://blog.csdn.net/u012838207/article/details/82867701 HttpURLConnection与HttpClient浅析 1. GET请求 ...

  4. [转]C++11常用特性的使用经验总结

    转载出处 http://www.cnblogs.com/feng-sc C++11已经出来很久了,网上也早有很多优秀的C++11新特性的总结文章,在编写本博客之前,博主在工作和学习中学到的关于C++1 ...

  5. 操作系统口令认证,sysdba本地登录需要输入密码

    开发测试人员,反馈,sqlplus / as sysdba 登陆需要输入密码? 本篇文档流程: 1.场景还原 2.问题处理 3.相关问题介绍 一.场景还原 1)配置SQLNET.ora配置文件,配置操 ...

  6. android active间数据传递

    Bundle是key-value存储. Bundle bundle=new Bundle(); bundle.putString("key", "value") ...

  7. c语言笔记3运算符与表达式

    运算符与表达式 知识点一 操作数:参与运算的具体对象. 运算符:指明了对操作数进行的某项运算. 表达式:表示一个求值得规则.它由变量.常量.运算符和函数.括号按一定规则组成. 书写表达式的细节:1,运 ...

  8. h5 js判断是安卓还是ios设备,跳转到对应的下载地址

    /*ios和安卓跳转 js*/$(function(){ var u = navigator.userAgent; var ua = navigator.userAgent.toLowerCase() ...

  9. 编写 python 小程序,将LOL官网的皮肤保存下来,上传百度云,记录那些强撸灰飞烟灭的日子

    to 撸的血泪史:大学四年几乎都在宿舍打撸,So,把官网的皮肤都保存下来,存到百度云,就当一种纪念 编辑器:pycharm 用到的包:urllib.request, requests, json, r ...

  10. .net调用系统软键盘(兼容win7及win10)

    没有什么技术说明,也是查询出来的,在此做记录 public class StartKeyBoard    {        public static bool isShowNumBoard = fa ...