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更新时比较复杂。