Android线程间的通信

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();

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

Android线程间的通信

你可能感兴趣的:(android)