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

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

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

Android之Handler源码分析(第六篇:其他特性)_第1张图片

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()方法的)

Android之Handler源码分析(第六篇:其他特性)_第2张图片

你可能感兴趣的:(Android,Handler机制,android,其他,java)