getMainLooper()
Als ein Verfahren, wird es das gleiche Ergebnis in Bezug auf die Art und Weise kehren Sie es genannt wird, so kann man die beiden sind die gleichen betrachten, wie aus dem Kontext des Loopers Rückkehr werden Sie das gleiche Ergebnis bei der Rückkehr der Looper aus der Anwendung, und es besseren Blick auf die Looper Klasse zu erhalten und sehen, wie es den Greifer zurück:
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();
}
:
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();
}
und wenn an der get()
Methode in ThreadLocal.class suchen
und Thread.currentThread();
nach Thread.class docs:
Returns: die aktuell Thread ausführt.
welches ist der Thread, der den Kontext im Fall von laufenden Android hält.
Und schließlich sehe ich das, was sollten Sie, dass nicht, wie stört, sind den Hauptgreifer zu bekommen, aber was ist die beste Praxis Sie folgen sollen, wenn sie mit Greifern zu tun, wie wenn getMainLooper()
und zu verwenden, wenn verwenden Looper.prepare()
, as described here:
Looper.prepareMainLooper() bereitet Looper in Haupt-UI-Thread. Android Anwendungen rufen normalerweise diese Funktion nicht auf. Als Haupt-Thread hat seinen Looper lange vor der ersten Aktivität, Dienst, Provider oder Broadcast-Empfänger vorbereitet.
Aber Looper.prepare() bereitet Looper im aktuellen Thread vor. Nachdem diese Funktion aufgerufen wurde, kann Thread Looper.loop() aufrufen, um die Verarbeitung von Nachrichten mit Handlern zu starten.
Und auch Sie sollten den Unterschied zwischen getMainLooper()
und myLooper()
wissen, as described here:
getMainLooper
Returns the application's main looper, which lives in the main thread of the application.
myLooper
Return the Looper object associated with the current thread. Returns null if the calling thread is not associated with a Looper.
für mich wäre es 'Looper .getMainLooper() ', weil kein Kontextobjekt benötigt wird. Und per Definition sind beide ähnlich, dann ist die Wahl deine. –