使用AsyncTask类实现简单的异步处理操作
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类实现简单的异步处理操作的更多相关文章
- AsyncTask和Handler两种异步方式的实现和区别比较
1 AsyncTask实现的原理,和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以 ...
- android开发之路12(android四大组件&Fragment&AsyncTask类)
一.Activity组件1.简介:Activity组件是Android四大组件之一,通常一个Activity相当于一个用户界面,我们可以通过加载布局文件将Android提供的各种控件及自定义控件显示到 ...
- AsyncTask类
1.定义 异步任务类,在类中实现异步操作,并提供回调方法反馈当前异步执行的程度,最后反馈 的结果提供给UI主线程. <1>Android线程 ...
- Android的AsyncTask类的解读
国庆节放假.搞了半个月都没有上班了,coding的时候一点都不在状态,本来这篇文章是在国庆节前写完的,可是由于自己的懒 惰,导致延期到国庆节,哎,这种习惯真心不好呀...不多说了以下来进入正题 之前我 ...
- 经测试稳定可用的蓝牙链接通信Demo,记录过程中遇到的问题的思考和解决办法,并整理后给出一个Utils类可以简单调用来实现蓝牙功能
说明:这是本人在蓝牙开发过程中遇到过的问题记录和分析,以及解决办法. 在研究过程中,许多的前人给出的解决方案和思路指导对我相当有帮助,但并非都是可采取的解决方法, 经过本人对这些方法的测试和使用过后, ...
- 【转】 Pro Android学习笔记(九二):AsyncTask(1):AsyncTask类
文章转载只能用于非商业性质,且不能带有虚拟货币.积分.注册等附加条件.转载须注明出处:http://blog.csdn.net/flowingflying/ 在Handler的学习系列中,学习了如何h ...
- 2.NetDh框架之简单高效的日志操作类(附源码和示例代码)
前言 NetDh框架适用于C/S.B/S的服务端框架,可用于项目开发和学习.目前包含以下四个模块 1.数据库操作层封装Dapper,支持多种数据库类型.多库实例,简单强大: 此部分具体说明可参考博客: ...
- DataAccess通用数据库访问类,简单易用,功能强悍
以下是我编写的DataAccess通用数据库访问类,简单易用,支持:内联式创建多个参数.支持多事务提交.支持参数复用.支持更换数据库类型,希望能帮到大家,若需支持查出来后转换成实体,可以自行扩展dat ...
- java中Color类的简单总结
java中Color类的简单总结 1.颜色的常识 任何颜色都是由三原色组成(RGB),JAVA中支持224为彩色,即红绿蓝分量取值 介于0-255之间(8位表示) 2.Color类中的常量 publi ...
随机推荐
- method&interface
method Go中虽没有class,但依旧有method 通过显示说明receiver来实现与某个类型组合 只能为同一个包的类型定义方法 Receiver可以是类型的值或指针 不存在方法重载 可以使 ...
- GPU知识了解
前言 今天在使用阿里云的时候,无意间看到了有GPU服务器,于是对它做了一个大概的了解. 概念 GPU是Graphics Processing Unit的缩写,翻译成中文就是图形处理器.是一种专门在个人 ...
- elasticsearch 拼音检索能力研究
gitchennan/elasticsearch-analysis-lc-pinyin 配置参数少,功能满足需求. 对应版本 elasticsearch2.3.2 对应 elasticsearch-a ...
- 常见模块(一) time/datetime
1 time模块 1)时间三种格式的转化 2)time模块的相关方法 time.time() 打印当前时间的时间戳 单位是秒 距离1970年1月1日到当前的时间差 time.sleep(n) ...
- I think I need a boat house
I think I need a boat house. Fred Mapper is considering purchasing some land in Louisiana to build h ...
- bzoj 2460 线性基
#include<bits/stdc++.h> #define ll long long #define LL long long #define int long long using ...
- struts2 自定义异常拦截器配log4j
log4j.rootLogger = debug,stdout,F log4j.appender.stdout = org.apache.log4j.ConsoleAppender log4j.app ...
- android ListView 可缩放,支持左右上下手势
public class ZoomListView extends ListView implements SwipeListener { public static enum Action { Le ...
- ab压力测试nginx
centos7系统: yum install httpd-tools -y #安装ab压力测试工具
- H3C交换机限制子网之间的相互访问
acl number 3000 rule 1 permit ip source 10.0.5.0 0.0.0.255 destination 172.16.1.100 0 #允许10.0. ...