AsyncTask与Handler的区别

来源:互联网 发布:oracle数据库多少钱 编辑:程序博客网 时间:2024/04/30 10:24


1  AsyncTask实现的原理,和适用的优缺点

AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程.

使用的优点:

l  简单,快捷

l  过程可控

       

使用的缺点:

l  在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来.

2 Handler异步实现的原理和适用的优缺点

在Handler 异步实现时,涉及到 Handler, Looper, Message,Thread四个对象,实现异步的流程是主线程启动Thread(子线程)àthread(子线程)运行并生成Message-àLooper获取Message并传递给HandleràHandler逐个获取Looper中的Message,并进行UI变更。

使用的优点:

l  结构清晰,功能定义明确

l  对于多个后台任务时,简单,清晰

   

使用的缺点:

l  在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)


package cn.com.chenzheng_java;import android.os.AsyncTask;/** *  * @author chenzheng_java * @description 异步任务AcyncTask示例 *  */public class MyAsyncTask extends AsyncTask<String, Integer, Object> {/** * 该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。 很多时候,我们会在这里显示一个进度条啥的,以示后台正在 执行某项功能。 */@Overrideprotected void onPreExecute() {super.onPreExecute();}/** * 该方法由后台进程进行调用,进行主要的耗时的那些计算。 该方法在onPreExecute方法之后进行调用。当然在执行过程中 * 我们可以每隔多少秒就调用一次publishProgress方法,更新 进度信息 */@Overrideprotected Object doInBackground(String... params) {return null;}/** * doInBackground中调用了publishProgress之后,ui线程就会 调用该方法。你可以在这里动态的改变进度条的进度,让用户知道 * 当前的进度。 */@Overrideprotected void onProgressUpdate(Integer... values) {super.onProgressUpdate(values);}/** * 当doInBackground执行完毕之后,由ui线程调用。可以在这里 返回我们计算的最终结果给用户。 */@Overrideprotected void onPostExecute(Object result) {super.onPostExecute(result);}}






原创粉丝点击