【Android】 Handler——子线程更新UI

目录

Handler的引入

Handler的执行流程

相关名词解析

Handler相关常用方法

Handler写在子线程中

子线程更新UI


Handler的引入

Handler的执行流程

说白了就是子线程调用了主线程的某对象的方法,通过这个运行在主线程的对象,就能够对UI界面进行更新。

自己也可以实现,不过Handler更为专业的对象,已经写好了。

相关名词解析

UI线程HandlerMessageMessage QueueLooper

  • UI线程:就是我们的主线程,系统在创建UI线程的时候会初始化一个Looper对象,同时也会创建一个与其关联的MessageQueue。如果执行一个超过5秒的未完成的任务,程序将弹出dailog窗口显示无响应,强制关闭。
  • Handler:负责消息的发送与接收并处理。如果希望Handler正常工作,在当前线程中要有一个Looper对象。
  • Message:Handler接收与处理的消息对象。此对象有 4个成员变量:arg1和arg2是整型, what用户定义的消息代码, obj接收任意类型的对象。
  • MessageQueue:消息队列,用来存放通过Handler发布的消息,按照先进先出管理Message,在初始化Looper对象时会创建一个与之关联的MessageQueue。
  • Looper:每个线程只能够有一个Looper,管理MessageQueue,Looper会死循环取出Message Queue的非Null Message传递给Handler并设置此Message为Null。Main线程会自动创建Looper,子线程不会自动创建Looper,需要手动创建。

Looper.getMainLooper()得到的是主线程的Looper对象,Looper.myLooper()得到的是当前线程的Looper对象。

Handler相关常用方法

  • void handleMessage(Message msg):处理消息的方法,通常是用于被重写!
  • sendEmptyMessage(int what):发送空消息
  • sendEmptyMessageDelayed(int what,long delayMillis):指定延时多少毫秒后发送空信息
  • sendMessage(Message msg):立即发送信息
  • sendMessageDelayed(Message msg):指定延时多少毫秒后发送信息
  • final boolean hasMessage(int what):检查消息队列中是否包含what属性为指定值的消息 如果是参数为(int what,Object object):除了判断what属性,还需要判断Object属性是否为指定对象的消息

Handler写在子线程中

class LooperThread extends Thread {

    public Handler mHandler;

    public void run() {
        Looper.prepare(); // 创建本线程的Looper并创建一个MessageQueue
        mHandler = new Handler() {
            public void handleMessage(Message msg) {
                // process incoming messages here
            }
        };
        Looper.loop(); // 开始运行Looper,监听Message Queue
    }
}

子线程更新UI

Android在子线程更新UI的7种方法Android在子线程中更新UI的方法汇总(共七种)_tinyvampirepudge的博客-CSDN博客_android 子线程更新ui

Message8种构造方法Message的几种简单用法_奋斗青年一族的博客-CSDN博客_message

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虚妄狼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值