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

Android|Android之Handler源码分析(第六篇(其他特性))
文章图片

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

Android|Android之Handler源码分析(第六篇(其他特性))
文章图片

【Android|Android之Handler源码分析(第六篇(其他特性))】获得当前Handler对象持有的Looper对象的方法

Android|Android之Handler源码分析(第六篇(其他特性))
文章图片

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|Android之Handler源码分析(第六篇(其他特性))
文章图片

    推荐阅读