如何正确管理Android应用程序(非活动类)的上下文?

4

找不到答案的类似帖子。

如何在Android中无处不用的使用Application Context?

http://developer.android.com/reference/android/app/Application.html

在Android上获取'Context'的静态方法是什么?

在Android中获取Context的各种方法有何区别?

问题描述:

我有一组实用类,其中一些编写文件。其他人可能会使用数据库等等。关键是我的多个实用程序类需要Context。一个微不足道的例子是通过context.getString(r.strings.id)从strings.xml中读取内容。

我认为在大多数情况下,我想避免单例。除非绝对必要,否则我将使用单例。这个问题已经在其中一个链接中得到解决和发布。我个人认为它们是反面模式。只是个人选择。我明白你的应用程序上下文根据定义是单例对象。每个应用程序都只有一个应用上下文。如果这是唯一的方法,我愿意采用上述选项。

问题:

如何让我的实用程序类获取我的应用上下文,使得我可以简单地执行new MyContext()。当从活动中调用时,此上下文需要对应用程序资源进行引用。我认为这被称为applicationContext()。理想情况下,这将是一个廉价的操作。

谢谢。

编辑:(澄清) 我正在编写一个应用程序将自己绑定到的服务。我认为这不会影响答案。再次感谢。


不错的第一个问题。很好的解释,而且展示了你已经掌握的知识。但是如果您不想使用ApplicationContext(),那么您在寻找什么? - Entreco
1
@Entreco:我希望有一种优雅的方式来做同样的事情。我确实想要获取ApplicationContext,并且我认为在这种情况下接受一个单例是有意义的。实际上,我下载了整个Froyo的Android源代码,并查看了Google处理此问题的方式。事实证明,在我查看的所有类中,上下文都作为参数传递,要么作为Ctor的参数,要么作为函数的参数。更具体地说,如果您查看froyo版本发布下的此路径packages/apps/Contacts/src/com/android/contacts/util/* - agallego
1个回答

0

我认为最安全的方法是将上下文实例传递到需要访问资源等的每个函数中。这似乎是API采用的常见做法。事实上,直到这个问题出现之前,我才困惑为什么有这么多函数需要上下文实例。


这似乎是很多簿记要做。我会等待其他答案。现在,所有需要上下文的函数/对象都有一个额外的参数,可以是构造函数或函数本身。 - agallego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接