getMainLooper()
В качестве метода он вернет тот же результат в отношении того, как вы его вызвали, поэтому вы можете считать, что они одинаковы, поскольку возврат 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();
}
и при просмотре метода get()
в ThreadLocal.class:
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() подготавливает цикл в основном потоке пользовательского интерфейса. Приложения Android обычно не вызывают эту функцию. Поскольку основной поток подготовил свой цикл задолго до запуска первой активности, службы, провайдера или широковещательного приемника.
Но Looper.prepare() подготавливает Looper в текущем потоке. После вызова этой функции поток может вызвать Looper.loop(), чтобы начать обработку сообщений с помощью обработчиков.
А также вы должны знать разницу между 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.
person
Muhammed Refaat
schedule
21.09.2016
Looper.getMainLooper()
, потому что он не требует объекта контекста. И по определению оба похожи, тогда выбор за вами. - person Pankaj Kumar   schedule 21.09.2016