一、简介
AsyncTask是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程。
AsyncTask是对Handler与线程池的封装。使用它可以更方便之处的更新用户界面。但是它每次创建只能执行一次execute()
方法,即创建一个AsyncTask只能执行一次任务,当然execute可以传入多个Params(参数)
二、相关api介绍(仅限参考,具体使用请看代码)
AsyncTask必须被子类化才能使用
1
2
3
4
5
6
7/**
* public abstract class AsyncTask<Params, Progress, Result>
* Params 启动任务执行的输入参数,比如HTTP请求的URL。
* Progress 后台任务执行的百分比。
* Result 后台执行任务最终返回的结果,比如String。
*/
private class MyAsyncTask extends AsyncTask<Integer, Integer, String> {...}注意
- Task的实例必须在UI thread中创建;
- execute方法必须在UI thread中调用;
- 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法;
- 该task只能被执行一次,否则多次调用时将会出现异常;
公共方法(供外部调用的)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16// 试图取消对此任务的执行。
final boolean cancel(boolean mayInterruptIfRunning)
// 执行具有指定Params参数的任务。
final AsyncTask<Params, Progress, Result> execute(Params... params)
// 便捷的版本execute(Object)以简单的Runnable对象使用,可以是:asyncTask.execute();
static void execute(Runnable runnable)
// 执行具有指定参数的任务。
final AsyncTask<Params, Progress, Result> executeOnExecutor(Executor exec, Params... params)
// 如有必要,等待至多给定的时间计算完成,然后获取其结果。
final Result get(long timeout, TimeUnit unit)
// 如有必要,等待计算完成,然后获取其结果。
final Result get()
// 返回此任务的当前状态。
final AsyncTask.Status getStatus()
// 返回真,如果之前正常完成这个任务被取消。
final boolean isCancelled()私有方法(子类实现)
1 | // 覆盖此方法可在后台线程进行计算。(必须重写) |
三、示例代码
1 | // 创建 |