AsyncTask 轻量级的异步类
初步:http://www.cnblogs.com/devinzhang/archive/2012/02/13/2350070.html
详细:http://blog.csdn.net/liuhe688/article/details/6532519
深入:http://blog.csdn.net/hitlion2008/article/details/7983449
总结:
1.UI thread中调用:
创建实例,必须,只能被执行一次。(lx注解:是否使用单例模式就可以避免多次执行,好像单例是只初始化一次)
execute(Params... params),必须,执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。params为传入参数。
- ProgressBarAsyncTask asyncTask = new ProgressBarAsyncTask(textView,progressBar);
- asyncTask.execute(1000);
2.实现:以下
onPreExecute(),被调用后立即执行,一般用来在执行后台任务前对UI做一些标记。
doInBackground(Params... params),必须,onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法将接收输入参数和返回计算结果。在执行过程中可以调用publishProgress(Progress... values)来更新进度信息。params为传入参数。只有这个方法运行在另一个线程,所以不能操作ui。
onProgressUpdate(Progress... values),在调用publishProgress(Progress... values)时,此方法被执行,直接将进度信息更新到UI组件上。 Progress为后台任务执行的百分比。
onPostExecute(Result result),必须,当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,直接将结果显示到UI组件上。result为执行返回的结果
onCancelled() ,用户调用取消时,要做的操作
- import android.widget.ProgressBar;
- import android.widget.TextView;
- //生成该类的对象,并调用其execute方法之后
- //首先执行的的onPreExecute方法
- //其次是执行doInBackground方法
- public class ProgressBarAsyncTask extends AsyncTask<Integer, Integer, String> {
- private TextView tv;
- private ProgressBar pb ; //接收2个参数
- public ProgressBarAsyncTask(TextView tv, ProgressBar pb) {
- this.tv = tv;
- this.pb = pb;
- }
- @Override //异步直行的后台方法execute()先执行
- protected String doInBackground(Integer... params) { //继承的第一个参数类型
- int i;
- for(i=0;i<=100;i+=10){
- try {
- Thread.sleep(1000);
- publishProgress(i); //该方法会调用onProgressUpdate()以更新UI
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- }
- return i+params[0].intValue()+"";
- }
- @Override //该方法运行在UI线程中..
- protected void onPreExecute() {
- tv.setText("开始在UI线程中执行异步操作..");
- }
- @Override //最后一个参数String类型是doInBackground()的返回值和onPostExecute方法的参数类型,它在doInBackground运行完后再运行,并且运行在UI线程
- protected void onPostExecute(String result) {
- tv.setText("执行异步操作结束.."+ result); //result就是doInBackground()的返回值
- }
- @Override
- protected void onProgressUpdate(Integer... values) { //继承中的第2个参数的类型
- int value = values[0];
- pb.setSecondaryProgress(value);
- }
- }
AsyncTask 轻量级的异步类的更多相关文章
- Android中异步类AsyncTask的理解
这里有两种解释的方法,各有侧重点: 第一种解释: Async Task 简介:AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦 ...
- AsyncTask用法和异步加载图片
AsyncTask:是Android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI ...
- 重复造轮子,编写一个轻量级的异步写日志的实用工具类(LogAsyncWriter)
一说到写日志,大家可能推荐一堆的开源日志框架,如:Log4Net.NLog,这些日志框架确实也不错,比较强大也比较灵活,但也正因为又强大又灵活,导致我们使用他们时需要引用一些DLL,同时还要学习各种用 ...
- Android_AsyncTask异步类
·AsyncTask是一个轻量级的异步抽象类 ·Android程序刚启动时,会同时启动一个像一个的主线程,这个主线程主要负责处理与UI有关的事件,有时也被称为UI线程,Android app中必须遵循 ...
- AsyncTask异步类的简单操作
package com.example.day9; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; im ...
- Android批量图片载入经典系列——使用LruCache、AsyncTask缓存并异步载入图片
一.问题描写叙述 使用LruCache.AsyncTask实现批量图片的载入并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)载入图片,并放入缓存中 2.及时 ...
- Android批量图片加载经典系列——使用LruCache、AsyncTask缓存并异步加载图片
一.问题描述 使用LruCache.AsyncTask实现批量图片的加载并达到下列技术要求 1.从缓存中读取图片,若不在缓存中,则开启异步线程(AsyncTask)加载图片,并放入缓存中 2.及时移除 ...
- android:异步任务asyncTask介绍及异步任务下载图片(带进度条)
为什么要用异步任务? 在android中仅仅有在主线程才干对ui进行更新操作.而其他线程不能直接对ui进行操作 android本身是一个多线程的操作系统,我们不能把全部的操作都放在主线程中操作 .比方 ...
- .NET轻量级任务任务管理类
概述 最近做项目总是遇到服务跑批等需求,一直想写个任务管理的DLL,现在整理了一下思路,编写了一个DLL类库,使用方便.只要调用的子类继承服务基类便可以实现任务的整体调度.先看看页面效果: 使用方式 ...
随机推荐
- 关于 RxJava 技术介绍
Awesome-RxJava RxJava resources Blog 给 Android 开发者的 RxJava 详解 -强烈推荐 扔物线的文章 讲解非常详细 NotRxJava懒人专用指南 -这 ...
- iOS 解惑
(1)ARC下IBOutlet用weak还是strong http://blog.csdn.net/yongyinmg/article/details/20623605 苹果也没有完全建议用weak ...
- 对Objective-C相关的类、方法、属性、成员变量介绍
类的定义@interface FirstClass :NSObject@end//@interface表示声明的是一个类,“:”表示继承关系,@end类的结束类的实现@implementation F ...
- python——协程
由于python中的多线程比较特殊,所以协程的概念就变得尤为珍贵了,对于cpu密集型的操作,使用协程的效率无疑要好过多线程很多.因为协程的创建及其间切换的时间成本要低于线程很多.也因为这一点,很多人说 ...
- setInterval和setTimeout的区别
setInterval会每隔指定的毫秒数后反复执行指定代码. setTimeout只会在指定的毫秒数后执行一次指定代码. setInterval的用法: // 创建(创建后即开始计时) var int ...
- SAP模块常用增强总结{转载}
MM模块: 采购订单增强: BADI :ME_GUI_PO_CUST ME_PROCESS_PO_CUST 物料凭证增强: BADI:MB_DOCUMENT_BADI USER-EXIT:MBCF00 ...
- 一张图让你看懂各开源License[转]
你是否遇到过开源License,精炼而又晦涩的文字通常要读半天才能理解,而且大多数License差别不大,容易混淆.下面这张图让你段时间迅速掌握各种开源的License. 图片来源:阮一峰的博客. f ...
- rpm打包
1,需要安装rpmbuild 2,准备好工作目录: mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS} 3,自定义环境: vim ~/.rpmma ...
- python3批量删除豆瓣分组下的好友
python3批量删除豆瓣分组下的好友 """ python3批量删除豆瓣分组下的好友 2016年6月7日 03:43:42 codegay 我两年前一时冲动在豆瓣关注了 ...
- Android RadioGroup 及资源文件 & selector
RadioGroup :单选组 RadioButton :单选按钮 RadioButton和CheckBox的区别: 1.单个RadioButton在选中后,通过点击无法变为未选中 单 ...