34

我已经读过,在 Android 应用程序中保持对 Context 的长期引用是一个错误和内存泄漏的来源。

但我不明白是否可以创建一个看起来像这样的类:

public class HelperClass {
    private Context context;

    public HelperClass(Context context) {
        this.context = context;
    }
    public void myHelperMethod() {
        // uses this.context
    }
}

并从一个活动中调用它:

public class MyActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        HelperClass h = new HelperClass(this);
        h.myHelperMethod();
    }

    ...
}
4

2 回答 2

51

这很好,不会导致内存泄漏。

一旦onCreate完成执行,h将超出范围并有资格进行垃圾收集。如果h是静态的,那么你会遇到问题。只有当对上下文的引用超过了上下文本身的生命周期时,才会发生内存泄漏。一些有用的提示:

  • 尽可能使用Context.getApplicationContext()。只要您的应用程序存在,这个上下文就会存在。
  • 使用静态字段和内部类时要小心。
  • 通过分析器运行您的应用程序以检查泄漏。
于 2010-07-27T17:19:13.867 回答
7

HelperClass 的范围仅在您的 onCreate 函数内,因此一旦 onCreate 执行,您的“h”对象就不再需要并受到垃圾回收的影响。

如果“h”是静态成员,那将是一个不同的故事——这将是泄漏内存的好方法。

于 2010-07-27T17:20:44.170 回答