Speicher Leckage in der Ereignis-listener
Ich bin durch den Artikel http://android-developers.blogspot.com/2009/01/avoiding-memory-leaks.html. In diesem Artikel wird vorgeschlagen, um eine statische innere Klasse mit WeakReference . Viele innere Klassen werden verwendet, für Ereignis-Listener. Können diejenigen, die die innere Klasse auch die Speicherverluste verursachen? Sollte diese innere Klasse statisch sein?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Evtl. Es hängt davon ab, was die Zuhörer sind registriert bei.
Zum Beispiel eine gut geschriebene
OnClickListener
für eineButton
sollte nicht zu einem memory-leak, denn obwohl dieOnClickListener
kann eine innere Klasse und haben eine implizite Referenz auf dieActivity
die Gesamtheit der Objekte sind alle nur gebunden an die Aktivität. Daher, wenn die activity zerstört wird, die AktivitätButton
, undOnClickListener
alle garbage Collection als ganzes.Jedoch eine
LocationListener
, registriert mit derLocationManager
system-Dienst, wird durch den Prozess. Daher, auch wenn die activity zerstört wird, wird der Hörer eingeschrieben bleiben. Wenn dieser listener ist eine innere Klasse, es wird weiterhin zu halten eine implizite Referenz auf die Aktivität, und Sie haben ein memory leak.Evtl. In den meisten Fällen lautet die Antwort, "wenn Sie die Registrierung eines Listeners andere als mit der Benutzeroberfläche, sicher sein, um die Registrierung es an einer geeigneten Stelle". In diesem Fall gibt es keine Lecks.
Nicht Abstrakt, keine.