Android异步消息处理(二)

来源:互联网 发布:linux 修改用户字符集 编辑:程序博客网 时间:2024/06/08 15:45

android异步消息处理之Handler

1.利用Handler更新主线程UI

简单用法如下:

public static final int UPDATE_TEXT = 1;Handler handler = new Handler(){    @Override    public void handleMessage(Message msg) {        switch (msg.what) {            case UPDATE_TEXT:                mTvSpan.setText("hello!");                break;            default:                break;        }    }};@Overridepublic void onClick(View v) {    switch (v.getId()) {        case R.id.btn_drawerLayout:            new Thread(new Runnable() {                @Override                public void run() {                    Message message = new Message();                    message.what = UPDATE_TEXT;                    handler.sendMessage(message);                }            });            break;        default:break;    }}

2.原理简单说明:

Message:线程之间传递的消息,内部可以携带少量的数据,用于在不同线程之间传递信息;Message中有四个字段是需要注意的,

    what:上面示例中使用的;    arg1和arg2:携带一些整型数据;    obj:携带一个Object对象。

Handler:名为处理者,主要用于发送和处理消息,发送消息一般是使用Handler的sendMessage()方法,而发出去的消息最终会传递到Handler的handleMessage()方法中.

MessageQueue:消息队列,主要用来存放所有从Handler中发送过来的消息,这些消息都是等待被处理的,每个线程中只有一个MessageQueue.

Looper:Looper是每个线程中MessageQueue的管家,调用Looper的Loop方法后就会进入到一个无线循环中,然后每当发现MessageQueue中有消息时,都会取出来,并传递到Handler的handleMessage()方法中。

3.Handler机制原理图:

这里写图片描述

1 0
原创粉丝点击