据我所知android提供了以下几种方法,用于实现后台线程与UI线程的交互。
1、Handler
2、Activity.runOnUIThread(Runnable)
3、View.Post(Runnable)
4、View.PostDelayed(Runnabe,long)
5、AsyncTask

------------------------------------------------------------------

1. Handler
handler是android中专门用来在线程之间传递信息类的工具。

2. Activity.runOnUIThread(Runnable)
这个方法相当简单,我们要做的只是以下几步
<1> 编写后台线程,这回你可以直接调用UI控件
<2> 创建后台线程的实例
<3> 调用UI线程对应的Activity的runOnUIThread方法,将后台线程实例作为参数传入其中。
注意:无需调用后台线程的start方法

3. View.Post(Runnable)
该方法和方法二基本相同,只是在后台线程中能操控的UI控件被限制了,只能是指定的UI控件View。方法如下
<1> 编写后台线程,这回你可以直接调用UI控件,但是该UI控件只能是View
<2> 创建后台线程的实例
<3> 调用UI控件View的post方法,将后台线程实例作为参数传入其中

4. View.PostDelayed(Runnabe, long)
该方法是方法三的补充,long参数用于制定多少时间后运行后台进程

5. AsyncTask
AsyncTask是一个专门用来处理后台进程与UI线程的工具。通过AsyncTask,我们可以非常方便的进行后台线程和UI线程之间的交流。
AsyncTask拥有3个重要参数
<1> Params,Params是后台线程所需的参数。在后台线程进行作业的时候,他需要外界为其提供必要的参数,就好像是一个用于下载图片的后台进程,他需要的参数就是图片的下载地址
<2> Progress,Progress是后台线程处理作业的进度。依旧上面的例子说,就是下载图片这个任务完成了多少,是20%还是60%。这个数字是由Progress提供
<3> Result,Result是后台线程运行的结果,也就是需要提交给UI线程的信息。按照上面的例子来说,就是下载完成的图片
AsyncTask还拥有4个重要的回调方法
<1> onPreExecute,onPreExecute运行在UI线程,主要目的是为后台线程的运行做准备。当他运行完成后,他会调用doInBackground方法
<2> doInBackground,doInBackground运行在后台线程,他用来负责运行任务。他拥有参数Params,并且返回Result。在后台线程的运行当中,为了能够更新作业完成的进度,需要在doInbackground方法中调用PublishProgress方法。该方法拥有参数Progress。通过该方法可以更新Progress的数据。然后当调用完PublishProgress方法,他会调用onProgressUpdate方法用于更新进度
<3> onProgressUpdate,onProgressUpdate运行在UI线程,主要目的是用来更新UI线程中显示进度的UI控件。他拥有Progress参数。在doInBackground中调用PublishProgress之后,就会自动调onProgressUpdate方法
<4> onPostExecute,onPostExecute运行在UI线程,当doInBackground方法运行完后,他会调用onPostExecute方法,并传入Result。在onPostExecute方法中,就可以将Result更新到UI控件上
注意:AsyncTask实例只能执行一次,否则就出错哦