在非活动类中需要上下文
我的应用程序中有一些类需要调用需要Context作为参数的Android函数。 我没有它,因为这个类不是Activity类的子类。
解决这个问题的正确方法是什么?
- 将它作为parameter passing给每个通话?
- 在类实例化时传递它并保留它?
这取决于class级的作用。 但无论如何传递ApplicationContext
但不是活动之一。 如果你传递了Activity context,当你不再需要活动时,gc不能从内存中移除它。 但是应用程序上下文是在应用程序未被OS完成时使用的。请参阅避免内存泄漏
将其作为parameter passing。 或者更好,获取应用程序上下文以避免内存泄漏。
public class Example { protected Context context; public Example(Context context){ this.context = context.getApplicationContext(); } }
我几乎总是用一个构造函数参数的方法。 我将它传递给实例化,并在实例化的类中保留一个私有引用。
你必须考虑一件重要的事情。 如果传递Context
的类存在的时间比Activity
实例化的时间长,那么您应该使用应用程序上下文。 如果这个类正在做UI的东西,你将需要一个活动上下文。
确保您传递活动上下文的类不会比Activity
持续时间更长,否则您将泄漏整个活动。
如果你不做UI的东西,然后去应用程序上下文。
在类实例化时传递它并保留它。
一个典型的例子是当你创build一个数据库帮助器。 看到这个链接
我把它作为parameter passing,我认为它是最好的forms来做到这一点
我在这里也回答了这个问题。
您可以使用ContextWrapper
来完成此操作, 如此处所述。
例如:
public class MyContextWrapper extends ContextWrapper { public MyContextWrapper(Context base) { super(base); } }
并使用该类,因为它是上下文
最好的方法是遵循Bean的方法:
public class Example { protected Context getContext() { ... } ... }
那么这取决于访问上下文的可能性。 如果类是完全独立的,那么构造函数参数和私有领域似乎是最好的办法。
但是这个bean的属性方式可以屏蔽你进一步的代码更改。