AsyncTask 和Handler 的优缺点比较

来源:互联网 发布:em算法 python代码 编辑:程序博客网 时间:2024/05/18 00:35

   

   AsyncTask 实现的原理和优缺点:
      

     优点: 快捷  方便
  

       缺点: 当执行多个后台任务,和并需要ui 变更起来就比较复杂

    Handler 实现的原理和优缺点:

     优点: 简单 清晰

      缺点:当执行单个后台任务,显得代码过多,结构复杂(相对性)


     AsyncTask 介绍

      Android 的AsyncTask 比handler 更轻量级一些(只是在代码上,而实际上要比handler更耗资源)适用于简单的异步操作,  asyncTask 就是一个封装或的后台异步任务类。 继承与 Object 类。要使用Asynctask 工作,提供了3个泛型参数和并重载方法几个方法


   AsyncTask定义了3中泛型类型  params ,progress , result.

    params  启动任务执行的输入参数,比如http 的url.

    progress 是 显示任务执行的百分比。

    result  是后台任务执行返回的结果。如 String.


    使用AsynTask 异步任务类要重写的方法

      doingbackground(Params) 后台执行任务,比较耗时的操作都放到这里,注意这里不能直接操作ui. 操作完后调用

 public progress(progress)来更新任务进度。

   onpostexcut(Result)  此方法运行在主线程中,任务执行结果 作为此方法的参数返回。得以作为此方法的相当于handler处理ui 的方式。在这里直接可以使用 doingbackground 处理的结果来更新UI。

      有必要的话,还需要重写以下3个方法:

     onprogressUpdate(progress),  使用进度条来增加用户的体验度,此方法执行在主线程中,用户显示任务执行的进         度。

     onPreExecute   这里是用户最终调用 Execute 时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。

     onCancelled()  用户调用取消,要做的操作。


     使用AsncyTask 一下是需要注意的哦:

     Task 必须在UI thread中创建

      execute 必须在 UI thread 中调用。

     不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;

     该task  只能被执行一次,若多次调用会出现异常。


       Handler 介绍:

 

 handler 主要接收子线程传递过来的数据,并且用此数据配合线程更新UI。

 handler 运行在主线程,它与子线程是通过message 对象来传递数据的,这个时候handlder就接受着从子线程传递过来的数据(子线程用sendmessage())方法来传递 Message对象,把这些消息放到主线程,配合主线程更新UI.

  handler 和分发 message对象和runnable对象到主线程中,每个handler实例都会绑定到它创建的线程。

handler中分发消息的一些方法:

Post (Runnable)

PostAtTime(Runnable,long)

PostDelayed(Runnable,long)

SendEmptyMessage(int)

sendMessageAtTime(Message ,long)

sendMessageDelayed(Message,long)


 总结: 数据简单使用 AsyncTask 代码实现简单。数据量多且复杂使用  Handler+ thread 想比较Asynctack 来说能更好的利用系统资源且高效。

   

0 0
原创粉丝点击