将应用程序上下文传递给视图而不是活动上下文

时间:2012-12-29 07:33:29

标签: android android-context

为什么使用活动上下文,而我们可以使用应用程序上下文来加载和访问资源?意味着如果我使用应用程序上下文而不是活动上下文,则不会发生异常,那么为什么要使用活动上下文

示例:

在下面的示例中,如果我在Activities onCreate()中使用 getApplicationContext()而不是“ this ”指针,则无需任何操作异常。

 Button button = new Button(getApplicationContext());

2 个答案:

答案 0 :(得分:1)

getApplicationContext()应该与view一起使用,Activity's Context将具有活动范围之外的范围(例如,当您从活动绑定到服务时)。

但是对于像上面提到的定义视图(定义一个Button),你应该绝对使用MyActivity.thisthis或简单getApplicationContext())。

原因是如果你使用this,它的存活时间与整个应用程序的寿命一样长。但是对于Button,它应该在Activity完成后立即销毁,所以在定义这种类型的Views时,最好使用{{1}}(Activity的Context)。

  

如果我使用Application Context而不是Activity Context则没有   例外

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

答案 1 :(得分:0)

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

如果您阅读 getApplicationContext 上的文档,则会注意到只有在需要生命周期与当前上下文不同的上下文时才应使用此文档。这不适用于您的任何一个示例。

活动上下文可能包含有关完成这些调用所需的当前活动的一些信息。如果您显示确切的错误消息,可能能够指出它究竟需要什么。

但一般来说,除非你有充分理由不使用活动上下文,否则请使用活动上下文。