欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Handler原理

程序员文章站 2024-01-27 21:42:04
...

Handler使用方法:

---------------------Handler.sendMessage():此时更新UI的操作写在Handler的handleMessage方法中
改方式分为两种:
***新建Handler子类(内部类):***新创建Handler子类(继承Handler类) & 复写handleMessage()方法

class Mhandler extends Handler {

        // 通过复写handlerMessage() 从而确定更新UI的操作
        @Override
        public void handleMessage(Message msg) {
            // 根据不同线程发送过来的消息,执行不同的UI操作
            // 根据 Message对象的what属性 标识不同的消息
            switch (msg.what) {
                case 1:
                    mTextView.setText("执行了线程1的UI操作");
                    break;
                case 2:
                    mTextView.setText("执行了线程2的UI操作");
                    break;
            }
        }
    }

public Handler mHandler = new Mhandler();

***匿名内部Handler子类:***在主线程中,通过匿名内部类创建Handler类对象

public Handler mHandler = new Handler(){
            // 通过复写handlerMessage()从而确定更新UI的操作
            @Override
            public void handleMessage(Message msg) {
                // 根据不同线程发送过来的消息,执行不同的UI操作
                switch (msg.what) {
                    case 1:
                        mTextView.setText("执行了线程1的UI操作");
                        break;
                    case 2:
                        mTextView.setText("执行了线程2的UI操作");
                        break;
                }
            }
        };

---------------------Handler.post(runnable) :此时更新UI的操作写在Runnable中

 // 步骤1:在主线程中创建Handler实例
public Handler mHandler = new Handler();

// 步骤2:在工作线程中 发送消息到消息队列中 & 指定操作UI内容
       new Thread() {
            @Override
            public void run() {
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                // 通过psot()发送,需传入1个Runnable对象
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        // 指定操作UI内容
                        mTextView.setText("执行了线程1的UI操作");
                    }

                });
            }
        }.start();

Handler工作原理:

Handler原理

Handler原理

--------------Handler.post()与Handler.sendMessage()类似,区别在于:

Handler.post()不需外部创建消息对象,而是内部根据传入的Runnable对象 封装消息对象
Handler.post()回调的消息处理方法是:复写Runnable对象的run()

二者的具体异同如下:

Handler原理