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提供的一种轻量级的工具类,其 ...
随机推荐
- javascript学习内容--object.style.display="value" value值为“”none“隐藏”或 "block"显示
<head> var mychar=document.getElementById("con"); function hidden(){ mychar.style.di ...
- Android Intent
Intent在Android中的重要性不言而喻.本文主要总结下Intent使用过程中需要注意的一些问题. 1.隐式Intent AndroidManifest.xml声明时<intent-fil ...
- Head First 设计模式 --11 代理模式
代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问. 代码: interface Boss { public void meeting(); } class BossImp implem ...
- java:StringBuffer字符处理对象
1.添加字符 public class StringBufferDemo { public static void main(String args[]) { StringBuffer sbf = n ...
- Discuz! X3.1直接进入云平台列表的方法
Discuz! X3.1已经改版,后台不能直接进云平台列表,不方便操作,操作云平台服务时,大家可以这样操作: 1.登录后台:2.访问域名进入云平台列表http://你域名/admin.php?fram ...
- 常用shell
常用shell命令 选项 参数 ctrl+alt+f(1-6)字符界面7图形界面 ls 列出当前目录 -a 查看文件的详细信息 -L 查看所有的文件 包括隐藏文件 pwd 查看当前的工作路径 cd 切 ...
- Y Combinator
常见的例子 阶乘函数: fact = (a) -> if a > 0 then a * fact(a - 1) else 1 问题的提出 如上,在fact函数中调用了fact本身,无法使用 ...
- JAVA数据转换常用方法
时间格式化与运算 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar=sdf. ...
- 繁星——JQuery选择器之层级
[ancestor descendant] 在给定元素下匹配所有后代元素.这个选择器的使用概率相当之高,使用示例如下: //HTML代码: <div id='div01'> <inp ...
- 三星四核RP4412开发板的root问题
问:荣品四核RP4412开发板的板子是root权限吗? 或者怎么root? 答:su . android 我们提供的是root用户 问:root以后的授权管理器没法运行. 我需要root,我要在and ...