Android应用程序状态文档:
通常情况下,没有必要子类化Application。在大多数情况下,静态单例可以以更模块化的方式提供相同的功能[即维护全局应用程序状态]。如果您的单例需要全局上下文(例如注册广播接收器),则检索它的函数可以给定一个Context,该Context在首次构建单例时内部使用Context.getApplicationContext()。
我的请求是:您能解释并提供实现上述建议以维护全局状态的代码示例吗?
请注意,已经有一个建议建议子类化Application:
如何在Android中声明全局变量?
谢谢。
Context.getApplicationContext()
API 文档中所说的内容:“如果从此处返回的 Context 中使用,接收器将被注册到与您的应用程序相关联的全局状态。因此,它永远不会为您取消注册。如果接收器与静态数据而非特定组件相关联,则这是必需的。但是,如果您忘记取消注册、解绑等操作,则在其他地方使用 ApplicationContext 很容易导致严重的泄漏问题。” - Antonio Sestoactivity.registerReceiver(...)
,并指出在活动销毁完成之前应该取消注册接收器。它还指出,如果您未能取消注册接收器,框架将自动执行此操作,从而防止已注册的接收器和引用泄漏。 - Ryan Thomasactivity.getApplicationContext().registerReceiver(...)
,在这种情况下,您将可以访问应用程序的“全局状态”中的静态数据,但是注册的接收器不会自动清除任何点,这意味着开发人员需要确保他们不会意外创建允许注册接收器或类似对象创建泄漏的情况。 - Ryan Thomas