AsyncTask浅析

AsyncTask封装了线程池和Handler。AsyncTask有两个线程池:SerialExecutor和THREAD_POOL_EXECUTOR。前者是用于任务的排队,默认是串行的线程池;后者用于真正的执行任务。AsyncTask还有一个Handler,叫InternalHandler,用于将执行环境从线程池切换到主线程。AsyncTask内部就是通过InternalHandler来发送任务执行的进度以及执行结束等消息。
AsyncTask排队执行过程:

系统先把参数Params封装为FutureTask对象,它相当于Runnable,接着FutureTask交给SerialExcutor的execute方法,它先把FutureTask插入到任务队列tasks中,如果这个时候没有正在活动的AsyncTask任务,那么就会执行下一个AsyncTask任务,同时当一个AsyncTask任务执行完毕之后,AsyncTask会继续执行其他任务直到所有任务都被执行为止。

AsyncTask:异步任务.
1次执行:
对于同一个异步任务对象,只能执行一次.
2个线程:
UI线程和worker线程.
doInBackground()属于工作线程;
其他的都是UI线程方法.
3个参数:

①.Params:该参数决定了doInBackground()方法参数类型;还有execute()方法的参数类型.
②.Progress:决定了onProgressUpdate()方法的参数类型.
③.Result:决定了doInBackground()方法返回值类型;决定了onPostExecute()参数类型.

4个方法:

①.void onPreExecute(void);
②.Result doInBackground(Params);
③.void onProgressUpdate(Progress);
④.void onPostExecute(Result).
注意:还有一个小方法:
publishProgress(Integer).

遵循原则:
1.AsyncTask 类必须在UI线程中被加载
2.AsyncTask的实例化必须在UI线程中完成。
3.AsyncTask的 execute(Params…) 方法必须在UI线程中被调用。
4.不需要手动调用 这些方法: onPreExecute() , onPostExecute(Result) , doInBackground(Params…) , onProgressUpdate(Progress…)
5.一个AsyncTask实例只能被执行一次(第二次执行将会抛出异常)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值