【问题标题】:How to store the Context?如何存储上下文?
【发布时间】:2012-07-08 05:28:09
【问题描述】:

如何在 Android 应用中存储上下文? 经常需要在常规类中使用它,在 Activity 之外(例如数据库适配器)。

我尝试将上下文保存在静态字段中,但它会调用内存泄漏。

如果我在常规类中扩展上下文并在里面调用getApplicationContext(),也许会更好?

【问题讨论】:

  • 最好的方法是将Context 变量发送给常规类(需要上下文)的每个构造函数......并将其存储为该类的私有成员......

标签: java android android-context


【解决方案1】:

这样做的好方法是在构造函数中传递Context。您可以在每个示例代码中看到 Context 作为参数传递到自定义类中以供将来使用。

即在fedorvlasov's LazyListAdapter(这是从网络延迟加载图像的非常好的做法),您可以看到构造函数如下所示:public LazyAdapter(Activity a, String[] data)

这样,每次你在 Activity 之外需要使用它时,你已经将它存储为一个字段。

另一种方法(不推荐)是使用静态字段,即应用程序上下文。

public static final Context = getApplicationContext();

您将它放在启动活动中,然后就可以在应用程序的整个生命周期内访问应用程序上下文。

【讨论】:

  • 是的,现在我使用静态字段。会不会叫内存泄漏?
  • @bvitaliyg 是的,它可以......你不应该那样做。
  • @AlexLockwood 如果这是他应该知道的选项。但我也补充说不推荐。
  • @thepoosh 实际上,我们都错了,因为应用程序上下文是一个全局单例变量,在应用程序的整个生命周期中持续存在......所以没有办法真正“泄露”应用程序上下文。对不起,我误读了你的原帖。我只是对 SO 非常谨慎,甚至在答案中提到不可靠的解决方法,因为初学者几乎会听 SO 用户所说的任何内容,如果他们有 1000 多个声誉......:P
  • 问题,如果可以将应用程序上下文存储在全局中,为什么标准 android 设计将活动或上下文作为参数传递?我正在设计一个新的App 尝试使用更好的OO 设计。因此,要使用类似Activity -> Helper -> DTO -> DAOImpl -> DB. 的东西将数据存储到 DB im,所以我需要将 Context 从 Activity 一路(通过构造函数)传递到 DAO。看起来很傻? - 而不是存储在Application 静态变量中
猜你喜欢
  • 1970-01-01
  • 2017-09-23
  • 2011-05-09
  • 2021-09-07
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 2021-04-06
  • 2012-12-21
相关资源
最近更新 更多