Android 内存泄漏
android 自动垃圾回收机制,所以一般很少出内存泄露,但一泄露就很难查。
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);
}
这段代码由于background 导致整个activity 不能够释放。当时我看了就不是很明白。textview 引用了activity ,activity 又引用了textview ,textview 引用了 background ,background是一个静态变量。 那应该也会回收掉 activity 和textview ,除了background 。 后来查看了 setBackgroundDrawable 方法才明白 。
由于background 会通过成员变量 来反向引用了 textview 导致的。
最近看同事的一段代码:
onkeydown(keycode){
if(keycode == KeyEvent.keycode_back){
CustomDialog d = new CustomDialog(this);
............
}
}
反复点击backkey 会不停的 new dialog。 而d 又引用了activity。会不会导致不释放了。
通过eclipse自带的工具测试。内存测试。
不停的点击backkey ,totalsize 会从1.47左右升到 1.52左右 然后会被垃圾回收一次。 又回落到1.47左右。