Android之Handler源码分析(第六篇:其他特性)

两个创建Handler对象的工厂方法,API  >= 28时可使用,Android9.0新增的方法

获得当前Handler对象持有的Looper对象的方法

Handler中用于创建Message对象的方法

createAsync()方法分析

    public static Handler createAsync(@NonNull Looper looper) {
        if (looper == null) throw new NullPointerException("looper must not be null");
        return new Handler(looper, null, true);
    }

用于创建Handler对象的方法(异步消息),传入参数为Looper对象

1、检查传入的looper

若Looper为null,会抛出NullPointerException对象,该方法最终调用的是Handler的三个参数的构造方法,完成后会返回一个Handler对象

2、创建Handler对象

注意传给构造方法的第三个参数为true了吗?它代表此时创建的Handler对象将发送的都是异步消息

3、向调用者返回Handler对象

createAsync()方法分析(重载方法:2个参数)

    public static Handler createAsync(@NonNull Looper looper, @NonNull Callback callback) {
        if (looper == null) throw new NullPointerException("looper must not be null");
        if (callback == null) throw new NullPointerException("callback must not be null");
        return new Handler(looper, callback, true);
    }

用于创建发送异步消息的Handler对象,传入参数为Looper对象与Callback对象

1、检查2个传入参数

传入的looper与callback均不能为null,若为null时均会抛出NullPointerException

2、创建Handler对象

3、向调用者返回发送异步消息的Handler对象

getLooper()方法分析


    public final Looper getLooper() {
        return mLooper;
    }

用于返回Handler对象持有的Looper对象方法

obtainMessage()方法分析

    public final Message obtainMessage()
    {
        return Message.obtain(this);
    }

用于获取到一个Message对象的方法

1、通过Message的静态obtain系列方法获取Message对象

2、向调用者返回Message对象

总结

1、需要Message对象时,不要使用new的方式创建Message对象,而需要使用Handler提供的obtain系列方法或者直接使用Message的obtain系列方法!

2、异步消息的知识点很重要,是学好Handler机制的必经之路!

3、最后贴一个Handler重写的toString方法(看看大佬是怎么重写toString()方法的)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值