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):立刻发送消息。