AsycTask工作原理
AsycTask是一个异步任务是对handler和线程池的封装
同时他也是一个抽象类,在我们使用他的时候需要定义它的派生子类 他也是一个泛型类
里面有三个参数 params progress result
params 是doinbackgraound()方法的参数
progress AsyncTask所执行的后台任务的进度类型;
Result:后台任务的返回结果类型。
我们再来看一下AsyncTask类主要为我们提供了哪些方法:
onPreExecute() //此方法会在后台任务执行前被调用,用于进行一些准备工作
doInBackground(Params... params) //此方法中定义要执行的后台任务,在这个方法中可以调用publishProgress来更新任务进度(publishProgress内部会调用onProgressUpdate方法)
onProgressUpdate(Progress... values) //由publishProgress内部调用,表示任务进度更新
onPostExecute(Result result) //后台任务执行完毕后,此方法会被调用,参数即为后台任务的返回结果
onCancelled() //此方法会在后台任务被取消时被调用
首先来看一下execute方法的源码:
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
return executeOnExecutor(sDefaultExecutor, params);
}
executeOnExecutor方法调用了 onPreExecute方法,这表示了在执行后台任务前确实会调用onPreExecute方法。
同时也调用doinbackground方法
当doinbackground方法执行完时返回的结果由 onprogress 和 onpostexcute接收
AsyncTask可以以串行(一个接一个的执行)或并行(一并执行)两种方式来执行后台任务,在Android3.0及以后的版本中,默认的执行方式是串行。这个sDefaultExecutor就代表了默认的串行执行器(线程池)。也就是说我们平常在AsyncTask对象上调用execute方法,使用的是串行方式来执行后台任务。
AsyncTask的缺点
AsyncTask对象必须在主线程中创建
AsyncTask对象的execute方法必须在主线程中调用
一个AsyncTask对象只能调用一次execute方法
corePoolSize为CPU数加一;
maximumPoolSize为CPU数的二倍加一;
存活时间为1秒;
任务缓存队列为LinkedBlockingQueue。
AsycTask是一个异步任务是对handler和线程池的封装
同时他也是一个抽象类,在我们使用他的时候需要定义它的派生子类 他也是一个泛型类
里面有三个参数 params progress result
params 是doinbackgraound()方法的参数
progress AsyncTask所执行的后台任务的进度类型;
Result:后台任务的返回结果类型。
我们再来看一下AsyncTask类主要为我们提供了哪些方法:
onPreExecute() //此方法会在后台任务执行前被调用,用于进行一些准备工作
doInBackground(Params... params) //此方法中定义要执行的后台任务,在这个方法中可以调用publishProgress来更新任务进度(publishProgress内部会调用onProgressUpdate方法)
onProgressUpdate(Progress... values) //由publishProgress内部调用,表示任务进度更新
onPostExecute(Result result) //后台任务执行完毕后,此方法会被调用,参数即为后台任务的返回结果
onCancelled() //此方法会在后台任务被取消时被调用
首先来看一下execute方法的源码:
public final AsyncTask<Params, Progress, Result> execute(Params... params) {
return executeOnExecutor(sDefaultExecutor, params);
}
executeOnExecutor方法调用了 onPreExecute方法,这表示了在执行后台任务前确实会调用onPreExecute方法。
同时也调用doinbackground方法
当doinbackground方法执行完时返回的结果由 onprogress 和 onpostexcute接收
AsyncTask可以以串行(一个接一个的执行)或并行(一并执行)两种方式来执行后台任务,在Android3.0及以后的版本中,默认的执行方式是串行。这个sDefaultExecutor就代表了默认的串行执行器(线程池)。也就是说我们平常在AsyncTask对象上调用execute方法,使用的是串行方式来执行后台任务。
AsyncTask的缺点
AsyncTask对象必须在主线程中创建
AsyncTask对象的execute方法必须在主线程中调用
一个AsyncTask对象只能调用一次execute方法
corePoolSize为CPU数加一;
maximumPoolSize为CPU数的二倍加一;
存活时间为1秒;
任务缓存队列为LinkedBlockingQueue。