5

为什么要使用Activity Context而我们可以使用Application Context来加载和访问资源?意味着如果我使用Application Context而不是Activity Context则不会发生异常,那么为什么要使用Activity Context

例子:

在下面的示例中,如果我在活动onCreate()中使用getApplicationContext()而不是“ this ”指针,它可以正常工作,没有任何异常。

 Button button = new Button(getApplicationContext());
4

2 回答 2

2

getApplicationContext()应该与 Activity 一起使用view,它将具有 Activity 之外的范围(一个例子可能是当您从 Activity 绑定到服务时)。

但是对于像上面提到的那样定义视图(定义按钮),您绝对应该使用Activity's ContextMyActivity.this或简单this)。

原因是如果您使用getApplicationContext(),它的寿命将与整个应用程序的寿命一样长。但是对于一个 Button,它应该在 Activity 完成后立即销毁,所以this在定义这种类型的Views.

如果我使用应用程序上下文而不是活动上下文,则没有异常

也不例外,因为两者都是有效的上下文。如果您在整个应用程序生命周期内保持视图处于活动状态,即使它不需要(这最终会导致内存泄漏),或者您希望在 Activity 完成后立即销毁它,这取决于您。

于 2012-12-29T07:50:36.473 回答
0

它们都是 Context 的实例,但应用程序实例与应用程序的生命周期相关联,而Activity实例与 Activity 的生命周期相关联。因此,他们可以访问有关应用程序环境的不同信息。

如果您阅读getApplicationContext上的文档,它会指出,如果您需要一个生命周期与当前上下文分开的上下文,您应该只使用它。这不适用于您的任何一个示例。

Activity 上下文大概有一些关于当前活动的信息,这些信息是完成这些调用所必需的。如果您显示确切的错误消息,则可能能够指出它到底需要什么。

但总的来说,除非您有充分的理由不这样做,否则请使用活动上下文。

于 2012-12-29T07:42:53.800 回答