代码之家  ›  专栏  ›  技术社区  ›  Guido

android:对上下文和内存泄漏的引用

  •  28
  • Guido  · 技术社区  · 14 年前

    我读到过,在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 回复  |  直到 7 年前
        1
  •  45
  •   dbyrne    14 年前

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

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

    • 使用 Context.getApplicationContext() 如果可能的话。只要应用程序处于活动状态,此上下文将一直存在。
    • 使用静态字段和内部类时要小心。
    • Run your application through a profiler 检查有无泄漏。
        2
  •  7
  •   EboMike    14 年前

    HelperClass的作用域只在onCreate函数中,因此一旦onCreate执行,就不再需要“h”对象,而是要进行垃圾收集。

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