ANDROIDAndroid开发经验谈Android技术知识

Handler And AsynckTask

2016-06-06  本文已影响188人  木木00

Handler and AsynckTask : 都是用来实现异步的流程里更新主线程中的ui的变量(自己定义的)

区别:

Handler:

优点:结构清晰,功能定义明确,适用于多个后台任务(简单,清晰)。

缺点:在单个后台异步处理时,显的代码过多,结构过于复杂(相对于AsyncTask而言)。

AsyncTask:

优点:简单,快捷,过程可控。

缺点: 在使用多个异步操作和并需要进行ui更新是,就显得复杂。


Handler 的实战和理解

Handler,MessagerQueue, Looper之间的联系;

每一个线程都可以拥有一个Looper对象,Looper对象内部又拥有一个MessageQueue对象,MessageQueue就是消息队列,Looper负责从MessageQueue中,不断取出Message,然后执行相应的代码块调用。当要更新UI时通过sendEmptyMessage(int messageWhat)的方法向Handler发送一个消息,于此同时也将这个消息post到了MessageQueue的消息队列中Looper的Looper.next()就负责将这个消息从messageQueue的队列中取出来发送到handleMessage()的方法中进行更新UI;



AsyncTask  的实战和理解


参数解释

这三个参数会在类继承时被指定,参数都使用泛型构造。

Params 后台线程所需要的参数列表,与构造类时所指定的第一个参数类型匹配。

Progress 后台线程执行过程中发送的进度信息, 与构造类时所指定的第二个参数类型匹配。

Result 后台线程执行完后的返回值, 与构造类时所指定的第三个参数类型匹配。

AsyncTask 执行的4个阶段

step1

onPreExecute()在主线程(UI线程)调用,用于开始任务前的初始化工作。例如显示一个进条。

step2

doInBackground(Params...) 后台线程调用,onPreExecute() 执行完之后立即执行。用于执行耗时较长的操作。并且提供publishProgress(Progress...)方法用于显示进度信息。

step3

onProgressUpdate (Progress...)在主线程(UI线程)调用,用于响应publishProgress(Progress...)方法。

step4

onPostExecute(Result) 在主线程调用,doInBackground(Params...)方法执行完后立即调用。Result是doInBackground(Params...)方法的返回值。

例:

上一篇 下一篇

猜你喜欢

热点阅读