【发布时间】:2014-03-25 05:49:36
【问题描述】:
我没有遇到内存泄漏问题,但我需要知道内存泄漏是如何发生的。形成here 下面的代码会导致内存泄漏。
private static Drawable sBackground;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
if (sBackground == null) {
sBackground = getDrawable(R.drawable.large_bitmap);
}
label.setBackgroundDrawable(sBackground);
setContentView(label);
}
谁能给我一个完整的解释内存泄漏是如何发生的?以及 gc 如何无法收集参考资料?。
还请解释一下下面的代码是否泄漏内存? ,如果它是如何发生的?
private static Context context;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(context);
label.setText("Leaks are bad");
setContentView(label);
}
【问题讨论】:
-
我认为代码来自这个博客Avoid memory leaks on Android。该博客还解释了内存泄漏是如何发生的。
-
我已经读过了,但我需要知道垃圾收集器如何无法收集对象,当 Drawable 附加到视图时,视图被设置为 drawable 上的回调。在上面的代码 sn-p 中,这意味着 drawable 引用了 TextView,而 TextView 本身也引用了 Activity,那么当 gc 试图收集这些对象时,具体的问题是什么?
标签: java android memory memory-leaks