首页 > 代码库 > Android学习笔记(十三) Handler

Android学习笔记(十三) Handler

可用于解决上一则笔记所提到的WorkerThread无法修改UI控件的问题

一、Handler、Looper和MessageQueue的基本原理

技术分享

  Handler把消息对象放到MessageQueue当中,而Looper负责在消息队列头部不断取出消息对象。取出的对象再交给Handler处理。

二、一个简单的Handler例子

  -先创建一个继承Handler的类,注意是导入Android.os.Handler(非常重要)
    class firstHandler extends Handler{}

  -复写方法handleMessage(Message msg)

  -创建Handler对象
    handler = firstHandler()

  -生成一个Message,并且给what成员变量赋值
    Message msg = handler.obtainMessage();
    msg.what = 2;

  -将消息对象放置到消息队列中。
    handler.sendMessage(msg);

  -Looper将会从消息队列当中将消息对象取出;
  -Looper将会找到与消息对象对应的Handler对接(每一个Message对象都有与之对应的Handler对象);
  -Looper将会调用Handler对象的handleMessage(Message msg)方法,用于处理消息对象。

三、在主线程当中实现Haandler的handleMessage()方法

  注:不管是在WorkerThread还是在MainThread中都可以发送消息,即:handler.sendMessage(Message msg)

  1)在新建线程的run()中发送Message:

    class NetworkThread extends Thread{
        @Override
        public void run(){
            String s = "模拟从网络中获取的数据";
            Message msg = handler.obtainMessage();
            msg.obj = s;
            handler.sendMessage(msg);    
        }
    }                    

  2)复写handleMessage()方法。因为这个方法是被主线程调用的,所可以更改UI。

class MyHandler extends Handler{
    @Override
    public void handleMessage(Message msg){
        tring s = (String)msg.obj;
        textView.setText(s);
    }
}

 

Android学习笔记(十三) Handler