支持国产操作系统国产应用!

捉蛋网

当前位置: 捉蛋网>教程>Android开发>

Android线程间的通信

时间:2013-06-05 16:34来源: 作者: 点击:
  andriod提供了 Handler 和 Looper 来满足线程间的通信。例如一个子线程从网络上下载了一副图片,当它下载完成后会发送消息给主线程,这个消息是通过绑定在主线程的Handler来传递的。

  在Android,这里的线程分为有消息循环的线程和没有消息循环的线程,有消息循环的线程一般都会有一个Looper,这个是android的新概念。我们的主线程(UI线程)就是一个消息循环的线程。针对这种消息循环的机制,我们引入一个新的机制Handler,我们有消息循环,就要往消息循环里面发送相应的消息,自定义消息一般都会有自己对应的处理,消息的发送和清除,把这些都封装在Handler里面,注意Handler只是针对那 些有Looper的线程,不管是UI线程还是子线程,只要你有Looper,我就可以往你的消息队列里面添加东西,并做相应的处理。
  但是这里还有一点,就是只要是关于UI相关的东西,就不能放在子线程中,因为子线程是不能操作UI的,只能进行数据、系统等其他非UI的操作。

  class ChildThread extends Thread { 

      public void run() {

        /*
   * 创建 handler前先初始化Looper.
   */

          Looper.prepare();

        /*
   * 在子线程创建handler,所以会绑定到子线程的消息队列中
   *
   */

          mChildHandler = new Handler() {

              public void handleMessage(Message msg) {

 

                  /*
            * Do some expensive operations there.
         */

              }

          };

          /*

           * 启动该线程的消息队列

           */

          Looper.loop();

      }

  }

  当Handler收到消息后,就会运行handleMessage(…)的回调函数,可以在里面做一些耗时的操作。

  最后完成了操作要结束子线程时,记得调用quit()来结束消息循环队列。

  mChildHandler.getLooper().quit();

  下面是一个线程间通信的小例子:

[1] [2] 下一页

(责任编辑:捉蛋网-刷机)
............................................................................................... ...............................................................................................

 

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------