我的应用程序中有一些类需要调用需要作为参数传递的Context的Android函数,但由于该类不是Activity类的子类,因此我没有它。
如何正确解决这个问题?
- 在每次调用时将其作为参数传递?
- 在类实例化时传递并保留它?
我的应用程序中有一些类需要调用需要作为参数传递的Context的Android函数,但由于该类不是Activity类的子类,因此我没有它。
如何正确解决这个问题?
这取决于类的角色。但无论如何,应该传递ApplicationContext
而不是Activity。如果传递Activity context,则当您不再需要Activity时,gc无法将其从内存中删除。但是,应用程序上下文在应用程序尚未被操作系统完成时使用。请参阅避免内存泄漏
将其作为参数传递。更好的方法是获取应用程序上下文以避免内存泄漏。
public class Example {
protected Context context;
public Example(Context context){
this.context = context.getApplicationContext();
}
}
我一般使用构造函数参数的方式。我在实例化时将其传递并在实例化类中保留一个私有引用。
你需要考虑一个重要的问题。如果传递给Context
的类存在时间比实例化它的Activity
更长,那么你应该使用应用上下文。如果这个类正在做UI相关的操作,你将需要一个活动上下文。
确保传递给一个活动上下文的类不会存活比Activity
更长,否则就会泄漏整个活动。
如果你不需要进行UI相关的操作,则使用应用上下文即可。
我将它作为参数传递,我认为这是最好的做法。
这句话涉及到IT技术。public class Example{
private Context mContext;
public Example(Context context,int other, int other,int other){
this.context = context;
[...]
}
public void method(){
Toast.makeText(mContext,"text",Toast.Toast.LENGTH_SHORT).show();
}
}
- Aracem最好的方法是遵循Bean方法:
public class Example {
protected Context getContext() {
...
}
...
}
那么这取决于访问上下文的可能性。如果类是完全独立的,那么构造函数参数和私有字段似乎是最好的方法。
但是,使用bean属性的方式可以保护您免受进一步代码更改的影响。