Handler消息传递机制

来源:互联网 发布:人脸识别算法 开源 编辑:程序博客网 时间:2024/04/29 01:02

Android中UI并不是线程安全的,什么是线程安全呢

https://zh.wikipedia.org/wiki/%E7%BA%BF%E7%A8%8B%E5%AE%89%E5%85%A8

这是维基给出的解释。
如果有多个线程操作UI,会造成线程不安全问题。因此Android有规定:UI组件只能在Activity中对UI进行操作。
当一个程序第一次启动时,Android会同时启动一个Main Thread(主线程),主要负责与UI有关的操作,因此也被称为UI线程。
Addroid中消息传递机制主要是为了解决线多程安全问题,因为Android中只允许UI线程修改Activity中的UI组件,这样就导致了新启动的程序无法动态的改变组件的属性。这里就需要Handler来处理。

Handler类的作用:

  • 在新启动的线程中发送消息,
  • 在主线程中处理和接受消息。

    开发者只需重写Handler类中处理消息的方法即可,当新启动的线程发送消息时,会发送到MessageQuene(消息队列),而Handler会不断的从中队列中取出并处理消息。
    标注了一些比较常用的方法:

这里写图片描述

这里写图片描述

void handleMessage(Message msg):处理消息的方法。一般被重写。
boolean hasMessages(int what):检查消息队列中是否有包含what属性为指定值的消息。
hasMessages(int what, Object object):检查消息队列中是否有包含what属性且Object为指定值的消息。
Message obtainMessage():获取消息。
sendEmptyMessage(int what):发送空消息。
sendMessageDelayed(Message msg, long delayMillis):在一定时间内发送消息。
sendMessage(Message msg):立刻发送消息。

0 0
原创粉丝点击