Tôi có một hoạt động mà trông giống như sau:Rò rỉ bộ nhớ trong android.os.Message và/hoặc 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() { ... }
}
Sau onDestroy được gọi là, vẫn còn tin nhắn trong MessageQueue của hoạt động có chứa tham chiếu đến MyActivity $ 0 (refresh Runnable) đối với một số lý do. Bởi vì MyActivity $ 0 có một tham chiếu ngầm định đến MyActivity, điều này gây ra rò rỉ bộ nhớ của bối cảnh MyActivity.
Kết quả của merge_shortest_paths cho android.app.Activity trừ ma,, yếu, vv tài liệu tham khảo mềm sử dụng Eclipse Memory Analyzer Tool:
(Mã nguồn trên là một việc đơn giản hóa các mối quan hệ đối tượng thực tế hiển thị trong bãi chứa MAT)
Không nên gọi removeCallbacks xóa mọi tham chiếu đến đối tượng runnable khỏi Hàng đợi? Tại sao tôi bị rò rỉ bối cảnh?