Android --AsyncTask异步任务(一)
1.为什么要异步任务
- Android单线程模式
 - 耗时操作放在非主线程(UI线程)中执行
 
  我们都知道Android是单线程模式,只有主线程才能对UI操作,简称UI线程。当然这样的好处是:保证UI的稳定性、准确性,避免多线程同时对UI的操作,导致UI的混乱
		  但同时Android是一个多线程的操作系统,不可能把全部的事情放在主线程。如果任务堵塞,当时间过长,会抛出ANR(Application Not Responding)错误。
2.AsyncTask为何而生
- 子线程中更新UI
 - 封装、简化异步操作
 
3.构建AsyncTask子类的参数
	  AsyncTask<Params,Progress,Result>是一个抽象类,通常用于被继承,继承AsyncTask需要指定如下三个泛型参数:
- Params : 启动任务时输入参数的类型。
 - Progress : 后台任务执行中返回进度值的类型
 - Result : 后台执行任务完成后返回结果的类型
 
4.构建AsyncTask子类的回调方法
- doInBackground : 必须重写,异步执行后台程序将要完成的任务。
 - onPreExecute : 执行后台耗时操作前被调用,通常用户完成一些初始化操作。
 - onPostExecute : 当doInBackground() 完成后,系统自动调用onPostExecute()方法,并将doInBackground方法返回的值传给该方法
 - onProgressUpdate : 在doInBackground() 方法调用publishProgress() 方法更新任务的执行进度后,就会触发该方法
 
现在我们来写一个测试类:
import android.os.AsyncTask;
import android.util.Log; public class AsyncTaskTest extends AsyncTask<Void, Void, Void>{ @Override
protected Void doInBackground(Void... params) { Log.i("Task", "doInbackgroun");
return null;
} @Override
protected void onPostExecute(Void result) { Log.i("Task", "onPostExecute");
super.onPostExecute(result);
} @Override
protected void onPreExecute() { Log.i("Task", "onPreExecute");
super.onPreExecute();
} @Override
protected void onProgressUpdate(Void... values) { Log.i("Task", "onProgressUpdate");
super.onProgressUpdate(values);
}
}
在MainActivity中引用:
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        AsyncTaskTest task = new AsyncTaskTest();
        task.execute();
    }
当我们运行在模拟器上时:


根据上面的第四条所写,我们在doInBackground中调用publshProgress方法,运行后发现多了一个onProgressUpdate
protected Void doInBackground(Void... params) {
        Log.i("Task", "doInbackgroun");
        publishProgress(params);
        return null;
    }

谢谢大家的关注。I love you not for who you are, but for who I am before you.
Android --AsyncTask异步任务(一)的更多相关文章
- android  AsyncTask异步下载并更新进度条
		
AsyncTask异步下载并更新进度条 //如果不是很明白请看上篇文章的异步下载 AsyncTask<String, Integer, String> 第一个参数:String 传入 ...
 - Android AsyncTask异步加载WebAPI
		
之前做的程序一直存在很多问题,因为需要加载的Activity需要从网络加载数据.并没有完全正确的使用异步的方法去加载! 之前用的虽然是AsyncTask,但是在加载完成的时候还是并没有使用AsyncT ...
 - Android AsyncTask异步任务(二)
		
之前我们讲过了AsyncTask 的生命周期(onPreExecute-->doInBackground-->onProgressUpdate-->onPostExecute),今天 ...
 - Android  AsyncTask 异步任务操作
		
1:activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/androi ...
 - android AsyncTask异步任务(笔记)
		
AsyncTask是一个专门用来处理后台进程与UI线程的工具.通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流. 那么AsyncTask是如何工作的哪. AsyncTask拥 ...
 - Android线程管理之AsyncTask异步任务
		
前言: 前面几篇文章主要学习了线程以及线程池的创建与使用,今天来学习一下AsyncTask异步任务,学习下AsyncTask到底解决了什么问题?然而它有什么弊端?正所谓知己知彼百战百胜嘛! 线程管理相 ...
 - Android多线程分析之五:使用AsyncTask异步下载图像
		
Android多线程分析之五:使用AsyncTask异步下载图像 罗朝辉 (http://www.cnblogs.com/kesalin) CC 许可,转载请注明出处 在本系列文章的第一篇<An ...
 - Android 多线程----AsyncTask异步任务详解
		
[声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/3 ...
 - Android 消息异步处理之AsyncTask
		
Android提供了异步处理消息的方式大致有两种,第一种是handler+Thread,之前已经对于这种方式做过分析,第二种就是AsyncTask,这是Android1.5提供的一种轻量级的工具类,其 ...
 
随机推荐
- 数据库查询优化-SQL优化
			
1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默 ...
 - Oracle 表连接
			
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表都不 ...
 - Android 防止OOM优化
			
1. Android2.x及以下的系统优化: Bitmap被解码后的像素被存储在Native Heap中, Dalvik Heap有个external计数,记录了Bitmap所占用的内存. 当 Dal ...
 - for循环立即执行和不立即执行,js闭包
			
<script type="text/javascript" src="jquery-2.1.1.min.js"></script> & ...
 - yum源安装Mysql
			
Mysql版本:5.7 进入mysql官网,复制下载链接 步骤: (1) wget http://dev.mysql.com/get/mysql57-community-release-el6-9. ...
 - HashTree(哈希树) ——和trie类似,只是将字符换成了质数,sphinx用到了???
			
摘自:http://blog.csdn.net/yang_yulei/article/details/46337405 哈希树的理论基础 [质数分辨定理] 简单地说就是:n个不同的质数可以" ...
 - 今天遇到了批量删除 redis 某个前缀的所有 key,发现只能是这么解决。
			
redis-cli KEYS "php*" | xargs redis-cli DEL 利用 linux的 管道输出命令 xargs 根据返回结果逐条 删除. 上面这条命令 可 ...
 - Microsoft Help Viewer
			
Microsoft Help Viewer 1.0 Microsoft Help Viewer 2.0 Help Library 管理器 -Microsoft Help 查看器 打开VS 2010 ...
 - Java 和 Google Chrome 浏览器
			
来源:https://java.com/zh_CN/download/faq/chrome.xml 本文适用于: 浏览器: Chrome Java 版本: 7.0, 8.0 Chrome 不再支持 N ...
 - MD5加密代码
			
import java.security.MessageDigest;public class MD5_tes { public final static String MD5(String s){ ...