当前,在我的应用中,我有以下类:
public class MyApp extends Application {
private static Context context;
public void onCreate(){
super.onCreate();
MyApp.context = getApplicationContext();
}
public static Context getContext() {
return MyApp.context;
}
}
我用它在既不是活动也不是碎片的课堂中具有上下文。在使用此类中存储的上下文与使用和活动作为上下文之间有什么区别吗?最好要参加这堂课,或者我应该为任何需要它的班级提供活动作为背景吗?
谢谢。
使用存储在此类中的上下文与使用和活动作为上下文之间有区别吗?
是。请阅读有关该主题的戴夫·史密斯(Dave Smith)的史诗博客文章。总而言之:仅当您知道为什么 Application
是正确的答案...而很少是时,才使用Application
。
让这个班级是一个很好的做法
imho,通常不是。您有时可能需要一个Application
对象,但是您不需要自己的自定义子类,也不需要使其成为单身人士。
我应该为需要它的任何类提供活动作为上下文吗?
您将 Right Context
实例提供给需要它的任何方法。正如戴夫·史密斯(Dave Smith)在该博客文章中所描述的那样,并非所有Context
实例都相等。仅在 Application
是正确的Context
。
Application
。是的,这很好。对应用程序的Context
有静态引用不会导致任何内存泄漏。只要过程还活着,此Context
就存在。
如果您需要这样做,那么我认为您需要重新考虑设计。在活动,碎片,服务等之外,您不需要(我能想到的)上下文。一切都应源于基本的应用程序组件,并且您应该能够适当地传递上下文而无需这样做。例如,您可以从视图中调用getContext()
来获取它。如果您需要在POJO中使用它,则应将其与应用程序组件绑定并通过构造函数传递。
编辑:似乎您对内存泄漏问题可能会很好吗?我记得在某人做到这一点时,我记得读过有关屏幕定位的变化破坏了破坏。无论如何,从我的设计角度来看,这并没有多大意义。
edit2:你们是对的。我不正确地记得罗曼的博客文章。