我的应用程序中有一些类需要调用需要Context作为参数的Android函数。 我没有它,因为类不是Activity类的子类。
解决这个问题的正确方法是什么?
答案 0 :(得分:32)
这取决于班级的作用。但无论如何都要通过ApplicationContext
而不是活动1。如果您传递活动上下文gc无法在您不再需要活动后将其从内存中删除。但是,在OS.Refer Avoid Memory Leaks
答案 1 :(得分:17)
将其作为参数传递。或者更好的是,获取应用程序上下文以避免内存泄漏。
public class Example {
protected Context context;
public Example(Context context){
this.context = context.getApplicationContext();
}
}
答案 2 :(得分:10)
我几乎总是使用构造函数参数方法。我在实例化中传递它并在实例化的类中保留一个私有引用。
你必须考虑一件重要的事情。如果您传递Context
的类将比实例化它的Activity
更长,那么您应该使用应用程序上下文。如果该类正在进行UI操作,则需要一个活动上下文。
确保您传递活动上下文的课程的持续时间不会超过Activity
,否则您将泄露整个活动。
如果您不做UI内容,请使用应用程序上下文。
答案 3 :(得分:3)
我将它作为参数传递,我认为它是最好的形式
答案 4 :(得分:3)
在课程实例化时传递它并保留它。
一个典型的例子是创建db帮助程序时。见link
答案 5 :(得分:2)
我也回答了这个问题here。
您可以使用ContextWrapper
,as described here.
例如:
public class MyContextWrapper extends ContextWrapper {
public MyContextWrapper(Context base) {
super(base);
}
}
并使用该类,因为它是Context
答案 6 :(得分:1)
最好的方法是遵循Bean方法:
public class Example {
protected Context getContext() {
...
}
...
}
然后它取决于访问上下文的可能性。如果类是完全独立的,那么构造函数参数和私有字段似乎是最好的方法。
但是bean属性方法可以防止你进一步修改代码。