当前位置: 首页 > 面试题库 >

何时调用活动上下文或应用程序上下文?

通俊发
2023-03-14
问题内容

关于这两个上下文的内容,已经有很多文章了。但是我仍然不太正确。

到目前为止,据我了解:每个实例都是其类的一个实例,这意味着某些程序员建议您this.getApplicationContext()尽可能频繁地使用它,以免“泄漏”任何内存。这是因为另一个this(获取Activity实例上下文)指向的Activity是每次用户倾斜手机或离开应用程序等时都将销毁的一个。显然,垃圾收集器(GC)无法捕获,因此使用了过多的内存。 ..

但是任何人都可以拿出一些非常好的编码示例,使用它们将是正确的事情this(获取当前Activity实例的上下文),而应用程序上下文将是无用/错误的?


问题答案:

getApplicationContext()几乎总是错的。Hackborn女士(等等)已经非常明确,你只用getApplicationContext()当你知道为什么你使用getApplicationContext(),只有当你需要使用getApplicationContext()

直言不讳,“某些程序员”之所以使用getApplicationContext()(或getBaseContext()程度较小)是因为他们的Java经验有限。他们实现了一个内部类(例如,in中的OnClickListenerfor ),并且需要a 。他们使用或获取对象,而不是使用“获取外部类” 。ButtonActivityContextMyActivity.thisthisgetApplicationContext()getBaseContext()Context

你只用getApplicationContext()当你知道你需要Context的东西,可以活得比其他任何可能Context您在您的处置。场景包括:

使用getApplicationContext(),如果你需要的东西绑在Context本身将具有全局作用域。我在中使用getApplicationContext(),例如,WakefulIntentService将静态WakeLock用于服务。既然这WakeLock是静态的,并且我需要ContextPowerManager进行创建,那么使用它是最安全的getApplicationContext()

如果要通过绑定实例之间的(即绑定的句柄),则从getApplicationContext()绑定到时使用。Android会通过这些内部跟踪绑定,并保留对创建绑定的的引用。如果从绑定,则新实例将具有对的引用,而对则具有对旧的隐式引用,并且不能对旧实例进行垃圾回收。ServiceActivityServiceConnectionActivityonRetainNonConfigurationInstance()ServiceConnectionsContextsActivityActivityServiceConnectionActivityActivity

一些开发人员将自定义子类的Application用作自己的全局数据,然后通过进行检索getApplicationContext()。当然有可能。我更喜欢静态数据成员,如果出于其他原因,您只能拥有一个自定义Application对象。我使用一个自定义Application对象构建了一个应用程序,发现它很痛苦。哈克伯恩女士也同意这一立场。

以下是无论您在何处都不使用的原因getApplicationContext()

它不是一个完整的功能Context,支持所有Activity功能。您将尝试执行的各种操作Context将失败,主要与GUI有关。

如果ContextfromgetApplicationContext()保留了您不清除的调用所创建的某些内容,则可能导致内存泄漏。使用Activity,如果它保留了某物,则一旦Activity收集到垃圾,其他所有内容也会被清除。该Application对象将在过程的整个生命周期中保留。



 类似资料:
  • 实现如下所示 > 其次,我有一个活动范围组件网,我提供了当前活动和需要上下文的不同视图。 @module public class ActivityModule{private

  • 我多年来一直在使用Spring MVC,我试图理解与Spring Boot的一些关键区别。 你能帮我确认一下吗?或者让我明白我在这里遗漏了什么?

  • Spring Boot对于如何使用Spring构建应用程序有一个看法:例如它具有常规配置文件的常规位置,以及用于常见管理和监视任务的端点。Spring Cloud建立在此之上,并添加了一些可能系统中所有组件将使用或偶尔需要的功能。 引导应用程序上下文 一个Spring Cloud应用程序通过创建一个“引导”上下文来进行操作,这个上下文是主应用程序的父上下文。开箱即用,负责从外部源加载配置属性,还解

  • 我试图并行处理Spring批处理作业中的一些步骤。作业的XML配置如下:

  • 问题内容: 在我的android项目中,我有ImageAdapter类,可以在其中传递应用上下文以满足进一步的需求。 问题是我想使ImageAdapter作为一个单例对象,以便从我的所有活动中轻松访问此类的实例。但是我不知道如何将我的活动之一中的getApplicationContext()方法中的应用程序上下文传递给ImageAdapter。那么,有什么“魔术”可以做到以下几点? 也许您还有其他

  • 我对 Intent 有疑问。我想在Page1.java中继续一个名为ReadXMLFile.java(即上下文)的类的字符串。但是,当Page1.java继续进行时,Android模拟器会警告并关闭应用程序!这是ReadXMLFile的代码.java: 我想切换Page1中名为testo1的字符串。这是Page1.java代码: 在logcat中出现: 为什么应用程序在加载Page1时关闭?我反对