AsyncTask 轻量级的异步任务类 底层用到了线程池,封装了线程池和Handle
方便开发者在子线程更新UI
可以在线程中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI
public abstract class AsyncTask`
Params表示参数的类型
Progress表示后台任务的执行进度的类型
Result表示后台任务返回结果的类型
4个重要的方法
//主线程中执行.一般用于准备工作
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//线程池中执行,用于执行异步任务
@Override
protected Object doInBackground(Object[] params) {
return null;
}
//主线程中执行,当后台任务的执行进度发生改变时此方法会被调用
@Override
protected void onProgressUpdate(Object[] values) {
super.onProgressUpdate(values);
}
//主线程中执行,异步任务执行之后,此方法会调用
@Override
protected void onPostExecute(Object o) {
super.onPostExecute(o);
}
使用过程中的一些条件:
1.AsyncTask的类必须在主线程中加载
2.AsyncTask的对象必须在主线程中创建
3.execute方法必须在UI线程调用
4.不要在程序中直接调用四个重要的方法
5.AsyncTask的对象只能执行一次,也就是只能调用一次execute方法,否则回报运行时异常
6.可以通过AsyncTask的executeOnExecutor方法来并行的执行任务
串行与并行
在Android1.6以前AsyncTask是串行执行任务
Android1.6的时候AsyncTask采用在线程池中处理并行任务
Android3.0以后的版本中可以用executeOnExecutor方法来并行的执行任务
HandlerThread底层直接使用了线程
在run方法中通过Looper.prepare()来创建消息队列,并且通过Loop.loop()来开启消息循环
IntentService 【Android线程和线程池(线程)】是一种特殊的Service. 可用于执行后台耗时的任务,任务执行后他会自动的停止.由于自身是服务的关系,所以他的优先级比单纯的线程要高很多,比较适合执行一些高优先级的后台任务
封装了HandlerThread和Handler