首页 文章

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

提问于
浏览
27

我已经读过,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();
    }

    ...
}

2 回答

  • 45

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

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

    • 尽可能使用 Context.getApplicationContext() . 只要您的应用程序处于活动状态,此上下文就会存在 .

    • 使用静态字段和内部类时要小心 .

    • Run your application through a profiler检查是否有泄漏 .

  • 7

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

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

相关问题