AsyncTask的工作原理

来源:互联网 发布:影楼排版软件 编辑:程序博客网 时间:2024/06/05 08:00

AsyncTask的本质是一个线程池,用于处理异步任务,该类的本质是一个线程池.所有提交的异步任务都会在这个线程池中的工作线程内执行,当工作线程需要跟UI线程交互时,工作线程会通过向在UI线程创建的Handler传递消息的方式,调用相关的回调函数,从而实现UI界面的更新。

一个异步任务的执行一般包括以下几个步骤:
1.execute(Params... params),执行一个异步任务,需要我们在代码中调用此方法,触发异步任务的执行。
2.onPreExecute()准备运行,在 execute(Params... params)被调用后立即执行,一般用来在执行后台任务前对 UI 做一些
 标记。
3.doInBackground(Params... params)正在后台运行,在 onPreExecute()完成后立即执行,用于执行较为费时的操作,此方法
 将接收输入参数和返回计算结果。在执行过程中可以调用 publishProgress(Progress... values)来更新进度信息。
4.onProgressUpdate(Progress... values)进度更新,在调用 publishProgress(Progress... values)时,此方法被执行,直
 接将进度信息更新到 UI 组件上。
5.onPostExecute(Result result)完成后台任务,当后台操作结束时,此方法将会被调用,计算结果将做为参数传递到此方法中,
 直接将结果显示到 UI 组件上。


在使用的时候,有几点需要格外注意:
1.异步任务的实例必须在 UI 线程中创建。
2.execute(Params... params)方法必须在 UI 线程中调用。
3. 不 要 手 动 调 用 onPreExecute() , doInBackground(Params... params) , onProgressUpdate(Progress...
 values),onPostExecute(Result result)这几个方法。
4.不能在 doInBackground(Params... params)中更改 UI 组件的信息。
5.一个任务实例只能执行一次,如果执行第二次将会抛出异常。



0 0
原创粉丝点击