android - 我真的需要将 Context 实例深入到应用程序中吗?

标签 android architecture android-activity android-context

在应用程序的某处,我需要使用 getString 方法获取本地化字符串作为错误消息。为此,我需要一个 Context 实例,例如从 Activity 中获取的实例。这真的是这样设计的吗?我是否真的被迫将这些对象传递给类和方法,或者我是否忽略了这一点,还有其他方法可以获取字符串引用吗?

澄清一下,在一个 Activity 中,我有一个内部 AsyncTask 子类,它在 doInBackground 中为 UI 线程外的一些短网络处理实例化一个新类。我希望将错误消息本地化,为此我需要将一个 Context 实例(换句话说,Activity)传递到该类中。从 XML 文件中获取值资源的设计似乎有点不直观。这让我想知道为什么它与 Context 实例如此耦合在一起,而不是静态的东西,或者 - 原谅我 - 一个单例,因为 Context 暗示是全局应用程序上下文,而不是像 Activity 那样只是它的一部分。

最佳答案

不,你不应该这样做。一个简单的规则是;如果您需要上下文的目的是接触 UI 或仅与 Activity 类的内部相关联,那么您应该使用 Activity 上下文。即便如此,重要的是任何对上下文的引用都不具有比 Activity 更长的生命周期。

不遵循这一点的最大危险是,您将对 Activity 上下文的引用传递到代码中更深的某个地方,并且您的 Activity 被销毁,而您持有的引用仍在范围内。您刚刚泄露了您的 Activity 及其引用的所有内容。我建议不要将 Activity 上下文传递到 Activity 之外,除非确实必要,即使那样,也要确保控制该生命周期。

因此,与 UI 无关的内容需要上下文,例如您需要获取字符串资源,然后使用应用程序上下文。在 Activity 内部,并且在 Activity 中声明字符串引用的地方,使用 Activity 上下文是可以接受的,在我看来,这是首选,因为您正在就范围和生命周期做出有意识的决定。

也就是说,您应该问问这个特定方法是否更适合放在 Activity 中。很可能不是,但请问问自己。

最后说一个小小的迂腐点。您不会在任何地方传递对象。您传递一个引用,实际上是对对象的引用值。 Java 中的一切都是按值传递的。

关于android - 我真的需要将 Context 实例深入到应用程序中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13298365/

相关文章:

java - 从 String 到 Long 到 String 问题的 Android java datetime 值

architecture - 软件设计: use of data models and dependency between services

model-view-controller - MVC - 如果没有内容,谁来决定做什么?

java - 在 android 中按 Intent 传递包时在主要 Activity 上获取包

启动 Activity 时 Android 屏幕闪烁

java - 如何将 mp3 音频与文本同步?

java - 操作 Java/Android color int 的 alpha 字节

android - 当屏幕关闭(背景)时,是否可以在 Android 设备之间共享 "data"?

architecture - 考虑到数据库中的实际数据,我将如何在 RDBMS 和 DocDBMS 之间进行选择?

java - 他们是如何在 Android 上制作 imo/ebuddy 应用程序的?