首页 文章

检查并避免应用程序中的内存泄漏

提问于
浏览
12

所以,我完成了一个项目,现在我面临的主要问题是应用程序中的 Memory Leakage (“泄漏”意味着您保留对活动的引用,从而阻止GC收集它)

我发现的一些发生内存泄漏的案例是:

上下文泄漏

这是因为对活动上下文的长期引用 .

我找到了一个非常好的例子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);
}

这里的问题是 private static Drawable sBackground; 静态Drawable是以Activity作为上下文创建的,所以在这种情况下,有's a static reference to a Drawable that references the Activity, and that'为什么会有泄漏 . 只要该引用存在,Activity就会保留在内存中,泄露其所有视图 .

屏幕方向更改

引起注意的第二种情况是屏幕方向改变时 . 当屏幕方向改变时,系统默认会破坏当前活动并创建新活动,同时保留其状态 . 这样,Android将从资源重新加载应用程序的UI . 现在假设您编写了一个带有大位图的应用程序,您不希望在每次轮换时加载该位图 .

这将导致大量内存泄漏,因为可能需要加载大的位图 .

上下文活动

第三种情况,我发现是对活动上下文的引用 . 它还会导致内存泄漏 .

我想知道是否有任何简单的方法可以避免这种内存泄漏的发生 . 或者是否有工具可以检查并从应用程序中删除这些内存泄漏 .

2 回答

相关问题