Android线程和线程池(一)

来源:互联网 发布:windows telnet 漏洞 编辑:程序博客网 时间:2024/06/05 11:03

**

AsyncTask 轻量级的异步任务类

**

底层用到了线程池,封装了线程池和Handle
方便开发者在子线程更新UI
可以在线程中执行后台任务,然后把执行的进度和最终结果传递给主线程并在主线程中更新UI

public abstract class AsyncTask<Params, Progress, Result>`

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

是一种特殊的Service. 可用于执行后台耗时的任务,任务执行后他会自动的停止.由于自身是服务的关系,所以他的优先级比单纯的线程要高很多,比较适合执行一些高优先级的后台任务
封装了HandlerThread和Handler

1 0
原创粉丝点击