Handler
1、Handler消息机制主要分为四个部分:Message \ Handler \ MessageQueue \ Looper,如下图。
![Handler流程图](http://on-img.com/chart_image/5a27f88ce4b0f3a798677308.png)
实现过程:
1-Handle通过sendMessage()发送Message到MessageQueue
2-Message存放在MessageQueue中等待处理(注:每个线程中只有一个MessageQueue对象)
3-Looper当MessageQueue有Message时会将其取出并传递到Handler的handleMessage()方法中(注:每个线程只有一个Looper对象)
经过如图流程,从子线程到了主线程。
AsyncTask
AsyncTack通常用于从子线程切换到主线程
AsyncTack是个抽象类,需要用一个子类去继承它,继承时可传入三个参数。
1-Params
在执行AsyncTask时要传入的参数,可用于后台任务中使用。
2-progress
后台任务执行时,如果要在界面上显示当前的进度,则使用哲理指定的泛型作为进度单位。
3-result
但任务执行完成,要对结果进行返回,这里使用指定的泛型作为返回值类型。
如:
class DownloadTask extends AsyncTask<void ,Integer , Boolean>{}
经常要重写四个方法
1-onPreExecute()
该方法在后台任务开始时执行,用于进行界面上的初始化操作,如显示一个进度对话框
2-doInBackgrounr(params...)
该方法所有代码都在子线程中运行,用于处理耗时操作,不能进行UI操作,
一旦任务完成就可以通过return来返回结果
如果
AsyncTask的第三个参数指定为void,则可以不返回
3-onProgressUpdate(progress...)
方法中携带的参数是后代任务中传递过来的
可用于UI操作,利用传来的参数值可用于对界面元素的更新。
4-onpostExecute( result )
但后台任务执行完成调用此方法。
返回的数据会作为参数传递到此方法
可利用返回的数据进行Ui操作,如提醒任务执行结果,关闭进度条对话框等。