ich eine Aktivität haben, die wie folgt aussieht:Speicherleck in android.os.Message und/oder Handler.removeCallback?
class MyActivity extends Activity {
Runnable refreshTimer = new Runnable() {
public void run() {
refresh();
}
};
protected onCreate(...) {
handler.postAtTime(refreshTimer, ...);
}
protected onDestroy() {
handler.removeCallbacks(refreshTimer);
}
protected void refresh() { ... }
}
Nach onDestroy genannt wird, gibt es immer noch Nachrichten in der Messageaktivität, die Verweise auf MyActivity $ 0 (die Refresh-Runnable) aus irgendeinem Grund enthalten. Da MyActivity $ 0 einen impliziten Verweis auf MyActivity hat, verursacht das einen Speicherverlust des MyActivity-Kontext. Eclipse-Memory Analyzer-Tool
Das Ergebnis merge_shortest_paths für android.app.Activity Phantom ohne, weich, schwach, usw. Referenzen mit:
(Der Quellcode oben ist eine Vereinfachung der tatsächlichen Objektbeziehung angezeigt in der MAT-Dump)
Sollte nicht Aufruf removeCallbacks alle Verweise auf die ausführbaren Objekte aus der Warteschlange entfernen? Warum lecke ich Zusammenhänge?