主要有Message,Handler,MessageQueue,Loop:
1.Message 和Handler配合使用:
Message message = new Message(); message.what = UPDATE_TEXT; handler.sendMessage(message); // 将Message对象发送出去
private Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case UPDATE_TEXT: // 在这里可以进行UI操作 text.setText("Nice to meet you"); break; default: break; } } };
Message所有的成员有
public int | arg1 | arg1 and arg2 are lower-cost alternatives to using setData() if you only need to store a few integer values. |
public int | arg2 | arg1 and arg2 are lower-cost alternatives to using setData() if you only need to store a few integer values. |
public Object | obj | An arbitrary object to send to the recipient. |
public Messenger | replyTo | Optional Messenger where replies to this message can be sent. |
public int | what | User-defined message code so that the recipient can identify what this message is about. |
Message 是在线程之间传递的消息,它可以在内部携带少量的信息,用于在不同线
程之间交换数据。上一小节中我们使用到了 Message 的 what 字段,除此之外还可以使
用 arg1 和 arg2 字段来携带一些整型数据,使用 obj 字段携带一个 Object 对象。
要携带更多数据,可以使用setData(Bundle).
2 Handler
Handler 顾名思义也就是处理者的意思,它主要是用于发送和处理消息的。发送消
息一般是使用 Handler 的 sendMessage()方法,而发出的消息经过一系列地辗转处理后,
最终会传递到 Handler 的 handleMessage()方法中。
3 MessageQueue
MessageQueue 是消息队列的意思,它主要用于存放所有通过 Handler 发送的消息。
这部分消息会一直存在于消息队列中,等待被处理。每个线程中只会有一个 MessageQueue
对象。
4 Loop
Looper 是每个线程中的 MessageQueue 的管家,调用 Looper 的 loop()方法后,就会
进入到一个无限循环当中,然后每当发现 MessageQueue 中存在一条消息,就会将它取
出,并传递到 Handler 的 handleMessage()方法中。每个线程中也只会有一个 Looper 对象。