Ich bin neugierig, warum das unten ein Speicherleck ist, weil der mHandler auf dem mainThread erstellt wird und jetzt, wenn onDestroy aufgerufen wird, wird es nicht einfach den Thread töten? Wie kann der Handler existieren, nachdem die Aktivität zerstört wurde? Ich habe keinen neuen Thread erstellt. Muss ich verstehen, dass ein Handler, wenn er Dinge in der Nachrichtenwarteschlange hat, auch nach der Zerstörung eines Threads bleibt?Android - können MainThread-Handler Speicherlecks verursachen?
Die Referenz doc im Lesen ist here
also, wenn ein Handler Nachrichten in der Warteschlange hat, muss er weiter ausgeführt werden, selbst wenn die Aktivität, an der er erstellt wurde, endet, richtig? – j2emanue
Und im Fall meines Beispiels ist der Handler dem mainThread zugeordnet. und ich reite Runnables zum Hauptthreadlooper. Wenn die Aktivität nun onDestroy aufruft, da sich noch Nachrichten in der looper-Warteschlange von mainThreads befinden, erfasst der GC die Aktivität nicht? Oder ist es so, dass der GC die Aktivität wegen der Referenz, die das Runnable enthält, nicht sammelt? Sehen Sie, was ich meine? Sagen wir, das Runnable hatte keine Aktivitätsreferenz? Wäre es noch durchgesickert? – j2emanue
@ j2emanue Wenn Ihr Runnable keine Aktivitätsreferenz enthält, tritt in diesem Fall kein Aktivitätsleck auf, aber der Hauptthread bleibt aktiv, da er die Ereignisse in der Nachrichtenwarteschlange beenden muss, die vom Runnable gepostet werden. –