getMainLooper()
作为一种方法,它会根据您调用它的方式返回相同的结果,因此您可以认为两者是相同的,因为从上下文返回 Looper 将在从应用程序返回 Looper 时获得相同的结果,并且更好地查看Looper类并查看它如何返回 Looper:
private static Looper sMainLooper;
public static Looper getMainLooper() {
synchronized (Looper.class) {
return sMainLooper;
}
}
public static void prepareMainLooper() {
prepare(false);
synchronized (Looper.class) {
if (sMainLooper != null) {
throw new IllegalStateException(
"The main Looper has already been prepared.");
}
sMainLooper = myLooper();
}
}
public static Looper myLooper() {
return sThreadLocal.get();
}
在查看ThreadLocal.classget()
中的方法时:
public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T) e.value;
}
return setInitialValue();
}
并Thread.currentThread();
根据Thread.class文档:
返回: 当前正在执行的线程。
这是在运行android的情况下保存上下文的线程。
毕竟,我发现困扰您的不是如何获得主循环器,而是在处理循环器时应该遵循的最佳实践是什么,例如何时使用getMainLooper()
和何时使用Looper.prepare()
,如下所述:
Looper.prepareMainLooper() 在主 UI 线程中准备 looper。Android 应用程序通常不调用此函数。由于主线程在第一个活动、服务、提供者或广播接收器启动之前很久就准备好了它的循环器。
但是 Looper.prepare() 在当前线程中准备 Looper。调用此函数后,线程可以调用 Looper.loop() 开始使用 Handlers 处理消息。
而且您还应该知道 和之间的区别getMainLooper()
,如下所述:myLooper()
获取MainLooper
Returns the application's main looper, which lives in the main thread of the application.
我的循环器
Return the Looper object associated with the current thread. Returns null if the calling thread is not associated with a Looper.