aşağıdaki gibi görünen bir etkinliğe sahiptir: denir OnDestroy sonraAndroid.os.Message ve/veya Handler.removeCallback'de bellek sızıntısı var mı?
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() { ... }
}
nedense MyActivity $ 0 referansları (yenileme Runnable) içerirler etkinliğin MessageQueue iletiler hala var. MyActivity $ 0'ın MyActivity öğesine zımni bir başvurusu olduğundan, bu MyActivity bağlamında bir bellek sızıntısına neden olur.
android.app.Activity Eclipse Memory Analyzer Aracı kullanarak hayaleti, yumuşak, zayıf, vb başvurular hariç için merge_shortest_paths sonucu:
(yukarıdaki kaynak kodu görüntülenen fiili nesne ilişkisinin bir basitleştirme olduğunu MAT dökümü)
removeCallbacks çağırmasın, çalıştırılabilir nesnelere yapılan tüm referansları Kuyruktan kaldırır mısınız? Neden bağlamları sızdırıyorsunuz? denemek için