Android中线程间通信:消息机制

来源:互联网 发布:vlan arp 获得保存mac 编辑:程序博客网 时间:2024/05/17 01:59


消息机制是实现Android中线程间通信的方式,例如当主线程不能执行耗时操作时,会开启子线程来实现,而子线程不能更新UI却需要更新UI时,可以向主线程发出消息,当主线程收到消息后,可以处理消息,当然,处理的方式多半都是对UI控件实现更新!以此实现耗时操作+更新UI的功能!

在消息机制中,会使用到的类有:

  • Handler:消息的发送者和处理者

  • Message:消息

消息机制的基本使用

需要思考:

  • 在子线程的哪个位置发出消息?

  • 被发出的消息对象中是否需要封装一些数据?

  • 在主线程如何处理消息?即:如何更新UI?

实现:

  • 调用Handler对象的sendMessage(Message msg)可以发出消息

  • 使用Message类的无参数的构造方法可以创建消息对象

  • 调用Message对象的arg1arg2属性可以在消息对象中封装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()方法发送消息!

0 0
原创粉丝点击