Android:引用上下文和内存泄漏

时间:2010-07-27 17:12:34

标签: android android-context

我已经读过,Android应用程序中存在错误和内存泄漏源,以保持对上下文的长期引用。

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

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();
    }

    ...
}

2 个答案:

答案 0 :(得分:45)

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

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

  • 尽可能使用Context.getApplicationContext()。只要您的应用程序存活,此上下文就会存在。
  • 使用静态字段和内部类时要小心。
  • Run your application through a profiler检查泄漏情况。

答案 1 :(得分:7)

HelperClass的范围仅在你的onCreate函数中,所以一旦onCreate执行,就不再需要你的“h”对象并且需要进行垃圾回收。

如果“h”是一个静态成员,这将是一个不同的故事 - 这将是泄漏记忆的好方法。