Handler和AsyncTask的区别

              

                          

                        Handler和AsyncTask的区别

1、Handler

实现原理:Handler实现时,包含Handler、Thread、Message、Looper对象,

主线程启动子线程(Thread)。子线程运行生成Message-Looper获取Message并传给 Handler依次获取Looper的Message,并进行UI更新。

2)特点:Handler可以分发Message对象和Runnable对象到主线程中,每个Handler实例,都会绑定到创建他的线程中,安排消息或Runnable 在某个主线程中某个地方执行 ;安排一个动作在不同的线程中执行。

3)优缺点:

优点:使用Handler实现异步线程,结构清晰,功能定义明确。执行多个后台任务 时简单、清晰。

缺点:在单个后台异步线程处理时,代码过多,相对结构过于复杂。

2、AsyncTask

1)实现原理:AsyncTask是轻量级异步类,直接继承AsyncTask,在类中实现异步操作。并通过接口实现UI进度更新,最后把执行结果返回给主线程。

2)特点:直接继承Object类。定义了三种泛型类型 Params,Progress和Result。

Params 启动任务执行的输入参数,比如HTTP请求的URL。Progress 后台任务执行的百分比。Result 后台执行任务最终返回的结果,比如String。

异步加载数据最少要重写onPostExecute(Result)  相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主线程执行,任务执行的结果作为此方法的参数返回。

规则·:1)Task的实例必须在UI thread中创建;execute方法必须在UI thread中调用;

  2)不要手动的调用onPreExecute(), onPostExecute(),doInBackground(), onProgressUpdate()方法;该task只能被执行一次,否则多次调用时将会出现异常。

3)优缺点:

优点:AsyncTask实现异步线程简单,快捷;过程可控。

缺点:在使用多个异步操作和需要进行UI更新时比较复杂。

时间: 2024-11-10 18:25:20

Handler和AsyncTask的区别的相关文章

Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别?

一个帖子的整理: Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑.情况:1.要刷新UI,handler要用到主线程的looper.那么在主线程 Handler handler = new Handler

Handler与AsyncTask比较

AsyncTask实现的原理和适用的优缺点 AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作,并提供接口反馈当前异步执行的程度(可以通过接口实现UI进度更新),最后反馈执行的结果给UI主线程. 使用的优点: 简单,快捷 过程可控 使用的缺点: 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来. Handler异步实现的原理和适用的优缺点 在Handler 异步实现时,涉及到 Handler, Looper, Message,Th

new Handler()和new Handler(Looper.getMainLooper())的区别

一个帖子的整理: Handler一定要在主线程实例化吗?new Handler()和new Handler(Looper.getMainLooper())的区别如果你不带参数的实例化:Handler handler = new Handler();那么这个会默认用当前线程的looper一般而言,如果你的Handler是要来刷新操作UI的,那么就需要在主线程下跑.情况:1.要刷新UI,handler要用到主线程的looper.那么在主线程 Handler handler = new Handler

Android中的Handler和AsyncTask

1.Handler简介 Handler在android里负责发送和处理消息.它的主要用途: 1)按计划发送消息或执行某个Runnanble(使用POST方法),类似定时器: 2)从其他线程中发送来的消息放入消息队列中,避免线程冲突(常见于更新UI线程): 默认情况下,Handler接受的是当前线程下的消息循环实例(使用Handler(Looper looper).Handler(Looper looper, Handler.Callback callback)可以指定线程),同时一个消息队列(M

Handler和AsyncTask

Android消息机制: Message,handler,looper类的使用及消息的传递 主线程和子线程之间的消息传递 ————————————————— ——>     Message  message  message——>  looper —↑—————————————— ↓—— <————Handler<-————    ↓ Looper提供消息队列的集合,消息通过handler增加和取出,handler的操作对象就是主(UI Thread),子线程 Android.os

android线程之 Handler与AsyncTask的应用

做应用程序的开发的时候,我们程序员更多的关心的是线程. 一个android应用程序开启后,默认开启一个主线程(大部分都和UI相关,所以又叫UI 线程).在UI线程上面运行的Avtivity组件,Service组件,BroadcastReceiver组件. 用户操作主线程时,需要注意不允许在UI线程中做耗时的操作.比如:复杂的逻辑计算,休眠,联网,下载数据等都是耗时的操作.如果在UI主线程中做耗时的操作,一旦超过5秒,应用程序抛出异常,会报一个ANR(Application not respond

多线程异步机制Handler以及AsyncTask

Android当中多线程的写法跟JAVA当中相差不了太多,只需要新建一个类继承自Thread类即可.然后重写父类的run方法.并在里面写耗时逻辑即可 class MyThread extends Thread { @Override public void run() { // 处理具体的逻辑 } } 启动线程 new MyThread().start(); 当然也可以像下面这样写,这样的写法更加适合,因为使用继承的方式耦合性有点高 class MyThread implements Runna

Activity UI Handler ProgressBar AsyncTask

package io.vov.vitamio.activity; import android.app.Activity; import android.app.ProgressDialog; import android.content.Context; import android.content.Intent; import android.content.res.Resources; import android.os.AsyncTask; import android.os.Bundl

Android Thread和AsyncTask的区别和联系

一.Thread简介 在Android当中,当一个应用程序的组件启动的时候,并且没有其他的应用程序组件在运行时,Android系统就会为该应用程序组件开辟一个新的线程来执行.默认的情况下,在一个相同Android应用程序当中,其里面的组件都是运行在同一个线程里面的,这个线程我们称之为Main线程.当我们通过某个组件来启动另一个组件的时候,这个时候默认都是在同一个线程当中完成的.当然,我们可以自己来管理我们的Android应用的线程,我们可以根据我们自己的需要来给应用程序创建额外的线程. 在And