通过获取Application上下文,在每个需要Context的Activity中获取对Context对象的引用是否明智?我已经知道它可以创建内存泄漏来抛出Activity的上下文对象,但是当你创建复杂的Activity时,似乎几乎总是需要Context对象。我之前在Activity类的顶部声明了一个Context变量,并使用onCreate
中的“this”关键字对其进行初始化。我已经知道这可能是糟糕的形式,但是可以在onCreate
调用getApplicationContext()
初始化Context对象吗?换句话说,这有助于解决我的问题。
另外,限制静态变量的使用是否更好?如果我没有弄错,如果我调用静态方法,或者引用来自不同Activity的静态变量,那么将不会将其他Activity保留在内存中吗?
答案 0 :(得分:0)
您的Context
中确实不需要Activity
字段,因为您始终可以使用getBaseContext()
,getApplicationContext()
或{{来获取上下文1}}(因为活动本身就是上下文)。
如果您希望让this
课程变薄,则可能必须将Context
传递给其他课程。只要这些类的生命周期与Activity
的生命周期相同,这就完全可以了。这意味着,当您的Activity被销毁时,任何对象都不应该引用您传递的上下文。
静态方法非常好,只要它们不引用静态字段即可。如果没有状态,请使用静态方法。由于很多原因,静态场是危险的。因此,仅在正确的情况下使用它们。
答案 1 :(得分:0)
我认为您需要了解应用程序上下文和活动上下文之间的差异,请参阅the answer here。
但是在onCreate中调用getApplicationContext()初始化Context对象是否可以?换句话说,这有助于解决我的问题。
为什么需要初始化上下文对象?活动本身已经是一个背景。例如:
Intent intent = new Intent(this, MainActivity.class);
您不需要从应用程序上下文初始化上下文,因为活动上下文具有更多功能。请参阅此link。
另外,限制静态变量的使用是否更好?如果我没有弄错,如果我调用静态方法,或者引用来自不同Activity的静态变量,是否也不会将其他Activity保留在内存中?
要将数据从一个活动发送到另一个活动,您可能需要parcelable object and bundle或Event Bus来解除发件人/收件人的活动。
对于静态方法,您可能需要将它们分组到Utility类下。