在非活动类中需要上下文

我的应用程序中有一些类需要调用需要Context作为参数的Android函数。 我没有它,因为这个类不是Activity类的子类。

解决这个问题的正确方法是什么?

  1. 将它作为parameter passing给每个通话?
  2. 在类实例化时传递它并保留它?

这取决于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的属性方式可以屏蔽你进一步的代码更改。