通过new的方式创建Handler对象会调用Handler的构造方法,Handler构造方法有许多重载方法:
//freameworks/base/core/java/android/os/Handler.java
public class Handler {
@Deprecated
public Handler() {
this(null, false);
}
}
上面方法已经被标记为过时,再看另外一个构造方法:
//freameworks/base/core/java/android/os/Handler.java
public class Handler {
@Deprecated
public Handler(@Nullable Callback callback) {
this(callback, false);
}
}
这个方法同样标记为过时,,再看另外一个构造方法:
//freameworks/base/core/java/android/os/Handler.java
public class Handler {
public Handler(@NonNull Looper looper) {
this(looper, null, false);
}
}
这个方法终于没有标记为过时,我们可以通过new Handler(Looper.myLooper()){@Override public void handleMessage(@NonNull Message msg){}};来调用这个构造方法。
//freameworks/base/core/java/android/os/Handler.java
public class Handler {
public Handler(@NonNull Looper looper, @Nullable Callback callback) {
this(looper, callback, false);
}
}
这个方法同样没有过时,只追加了一个Callback,用于传入处理消息的回调,会调用三个参数的方法:
//freameworks/base/core/java/android/os/Handler.java
public class Handler {
final Looper mLooper;
final MessageQueue mQueue;
final Callback mCallback;
public Handler(@NonNull Looper looper, @Nullable Callback callback, boolean async) {
mLooper = looper;
mQueue = looper.mQueue;
mCallback = callback;
mAsynchronous = async;
}
}
在构造方法中将looper、mQueue、mCallback存储到Handler中。