在非Activity类中需要Context

the*_*itz 45 android android-context

我的应用程序中有一些类需要调用需要Context作为参数的Android函数.我没有它,因为类不是Activity类的子类.

解决这个问题的正确方法是什么?

  1. 在每次通话时将其作为参数传递?
  2. 在类实例化时传递它并保留它?

Max*_*xim 32

这取决于班级的作用.但无论如何通过ApplicationContext但不是活动一.如果您传递活动上下文gc无法在您不再需要活动后将其从内存中删除.但是,应用程序未通过OS完成时使用应用程序上下文.请避免内存泄漏


Mar*_*oek 17

将其作为参数传递.或者更好的是,获取应用程序上下文以避免内存泄漏.

public class Example {
    protected Context context;

    public Example(Context context){
        this.context = context.getApplicationContext();
    }
}
Run Code Online (Sandbox Code Playgroud)


Oct*_*ean 10

我几乎总是使用构造函数参数方法.我在实例化中传递它并在实例化的类中保留一个私有引用.

你必须考虑一件重要的事情.如果您传递的类Context将比Activity实例化它更长,那么您应该使用应用程序上下文.如果该类正在执行UI操作,则需要一个活动上下文.

确保您传递活动上下文的类不会持续超过Activity或者您将泄漏整个活动.

如果你不做UI的东西,那么请使用应用程序上下文.