Handler,Looper,Message,MessageQuene

Message

Message定义了一个可发送给Handler的包含任意对象的消息。
注意事项:虽然Message包含一个public的构造函数,获取Message对象的最好办法是通过Message.obtain()或者Handler.obtainMessage()
获取,因为这两个方法是从一个可回收的消息池中获取消息的

Looper

为了帮线程运行消息而设计的一个类。Thread默认没有消息循环。在Thread中调用Looper.prepare()开始执行循环,调用Looper.loop() 处理消息。android主线程默认创建好了一个Looper,所有的UI操作都在主线程中。
下面是在一个线程中使用Looper和实例化Handler的例子:

  class LooperThread extends Thread {
      public Handler mHandler;

      public void run() {
          Looper.prepare();

          mHandler = new Handler() {
              public void handleMessage(Message msg) {
                  // process incoming messages here
              }
          };

          Looper.loop();
      }
  }

MessageQueue

MessageQueue包含一个可被Looper对象分发的Message列表。Message并不是直接添加到消息队列中的,而是通过一个与Looper有关联的Handler对象添加的。
通过 Looper.myQueue()方法可以获取当前线程的消息队列。

Handler

Handler允许我们为线程的MessageQueue发送和处理消息和Runnable对象。
当为您的应用程序创建一个进程时,其主线程专用于运行一个消息队列,该消息队列负责管理顶级应用程序对象(活动,广播接收器等)及其创建的任何窗口。我们可以在创建我们自己的线程,并且子线程可以通过Handler与主线程交互。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容