消息机制是实现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()方法发送消息!
1987

被折叠的 条评论
为什么被折叠?



