Wenn es sicher ist, anonyme innere Klassen in Android zu verwenden
Speicherlecks innerer Klassen
In Android tritt ein Speicherverlust auf, wenn eine innere Klasse ihre äußere Klasse überlebt. Dies kann passieren, wenn die innere Klasse einen starken Verweis auf die äußere Klasse hat, entweder direkt oder indirekt über ein anderes Objekt.
Sichere Situationen für die Verwendung anonymer innerer Klassen
Verwendung Anonyme innere Klassen innerhalb einer Aktivität sind im Allgemeinen sicher, wenn:
Beispiel für eine sichere anonyme innere Klasse Klasse
Das Codebeispiel, das Sie in Ihrer Frage angegeben haben, ist ein Beispiel für eine sichere anonyme innere Klasse:
// This is safe because the anonymous class is a short-lived callback okButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { dialog.dismiss(); } });
Gefährliche Situation bei der Verwendung anonymer innerer Klassen
Die Verwendung anonymer innerer Klassen innerhalb einer Aktivität kann gefährlich sein, wenn:
Beispiel einer gefährlichen anonymen inneren Klasse
Das folgende Codebeispiel veranschaulicht eine gefährliche anonyme innere Klasse Klasse:
// This is dangerous because _droidPlayRunnable holds a long-lived reference to _someFieldOfTheActivity _handlerToDelayDroidMove = new Handler(); _handlerToDelayDroidMove.postDelayed(_droidPlayRunnable, 10000); private Runnable _droidPlayRunnable = new Runnable() { public void run() { _someFieldOfTheActivity.performLongCalculation(); } };
Aktivitätslebenszyklus und innere Klassen verstehen
Android-Aktivitäten haben einen Lebenszyklus, der bestimmt, wann sie erstellt, fortgesetzt, angehalten und zerstört werden. Wenn eine Aktivität zerstört wird, geht ihr interner Zustand verloren. Dazu gehören Verweise auf alle inneren Klassen innerhalb der Aktivität.
Schutz vor Speicherlecks
Um Speicherlecks in anonymen inneren Klassen zu vermeiden, ist Folgendes wichtig:
Das obige ist der detaillierte Inhalt vonWann ist es sicher, anonyme innere Klassen in Android zu verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!