消息机制是实现Android中线程间通信的方式,例如当主线程不能执行耗时操作时,会开启子线程来实现,而子线程不能更新UI却需要更新UI时,可以向主线程发出消息,当主线程收到消息后,可以处理消息,当然,处理的方式多半都是对UI控件实现更新!以此实现耗时操作+更新UI的功能!
在消息机制中,会使用到的类有:
-
Handler:消息的发送者和处理者
-
Message:消息
消息机制的基本使用
需要思考:
-
在子线程的哪个位置发出消息?
-
被发出的消息对象中是否需要封装一些数据?
-
在主线程如何处理消息?即:如何更新UI?
实现:
-
调用
Handler
对象的sendMessage(Message msg)
可以发出消息 -
使用
Message
类的无参数的构造方法可以创建消息对象 -
调用
Message
对象的arg1
、arg2
属性可以在消息对象中封装int类型的数据 -
自定义
Handler
类的子类,并重写public void handleMessage(Message msg)
方法可以处理消息,该方法是运行在主线程的,并且参数Message
对象就是此前发出的消息对象
Message
在消息机制中,Message是消息的载体,用于封装相关的数据!
Message类中可用的属性有:
-
int arg1 -> 用于封装int类型的数据
-
int arg2 -> 同上
-
Object obj -> 用于封装任何类型的数据
-
int what -> 用于使用int类型的常量标识消息的意义
虽然Message类有无参数的构造方法,但是并不推荐使用Message的构造方法创建消息对象,而是应该通过Message类的静态方法static
Message obtain()
来获取对象,该方法将尝试从消息中获取消息对象,如果没有可用的消息对象,该方法也会创建新的消息对象!
如果在调用Message的obtain()
方法时,指定了Handler对象作为参数,则应该调用Message对象的void
sendToTarget()
方法发送消息!
Message是消息的载体,可以封装消息应该表达的意义和数据
永远不要
new Message()
!而是应该调用Message类的obtain()
系列方法获取对象!
如果在调用
obtain()
系列方法时指定了Handler对象,则应该调用Message对象的void sendToTarget()
方法发送消息!