Handler基本使用

Handler

  1. 基本概念
    Handler:接收子线程发送的数据,并用此数据配合主线程更新UI。(子线程与主线程通信的工具)
    Handler定义在主线程中(UI线程中);
    Handler充当主线程和子线程之间交互的中介:
    Handler在新启动的子线程中发送消息;
    这里写图片描述
  2. 主要方法
    这里写图片描述

    post(Runnable)
    postAtTime(Runnable,long)
    sendEmptyMessage(int)
    sendMessageAtTime(Message,long)
    

    以上post类方法允许你排列一个Runnable对象到主线程队列中,
    sendMessage类方法, 允许你安排一个带数据的Message对象到队列中,等待更新.

  3. 基本流程
    创建Handle
 Handler mhandler = new Handler(){
        public void handleMessage(Message msg) 
        {
            switch (msg.what){
            //case后必须跟常量,即为final的
            case CURRENT_MSG:
                t.setText("ggg");
                break;
            }
        };
    };

创建Thread对象

Thread mThread = new Thread(){
        public void run() 
        {
            Message msg= mhandler.obtainMessage();
            msg.what=CURRENT_MSG;
            mhandler.sendMessage(msg);
        };
    };

启动thread
mThread.start();

//只能放int型数据
            mhandler.sendEmptyMessage(CURRENT_MSG);
            //允许处理Message对象
            mhandler.sendMessage(msg);

不用创建线程只是想延迟执行

Message msg = handler.obtainMessage();
msg.arg1 = childIndex;
handler.sendMessageDelayed(msg, delay);

避免恶意操作,将不够延迟时间的操作移除,避免程序内部操作次数

避免恶意操作延迟执行,只执行最后一次的操作:
class x implements Runnable {
        private  boolean enable ;

        public x(boolean enable) {
            this.enable = enable;
        }

        public void run() {
            //要延时的操作

        }
    }

X ref;
final boolean isEnable = enabled;
mHandler.removeCallbacks(ref);//移除上次的操作
ref = new x(isEnable);
mHandler.postDelayed(ref, 1000);    //延时执行
这里写代码片

网上一个很不错的帖子
(http://www.itzhai.com/android-the-role-and-use-of-handler.html#read-more)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值