Android getApplicationContext内存管理

时间:2012-06-27 10:42:57

标签: android memory-management lifecycle

在这篇文章中

When to call activity context OR application context?

Mark Murphy说

“它可以创建内存泄漏,如果来自getApplicationContext()的Context保留在你不调整它的调用所创建的东西上。使用Activity,如果它保留某些东西,一旦Activity被垃圾收集其他所有内容都会刷新.Application对象在您的进程生命周期内仍然存在。“

什么调用创建应用程序上下文保留的东西?

我有一个需要各种事物上下文的库。它可以在后台运行并跨越活动,但使用和更新活动上下文会有问题。

我认为这可能是使用应用程序上下文的首选之一?

2 个答案:

答案 0 :(得分:1)

如果库中对象的生命周期可以跨越多个活动,那么绝对使用应用程序上下文。使用活动上下文可防止垃圾收集器抛弃上下文。由于活动上下文可以保留相当多的数据,因此您的内存使用量会急剧增加。

此外,如果活动已关闭,则会放弃其窗口令牌。尝试使用该上下文生成对话框将得到BadTokenException。因此,如果对象与活动生命周期没有直接联系,那么就没有必要将活动上下文赋予对象。

修改:Here is a credible source

答案 1 :(得分:0)

在我的一个图书馆项目中,我遇到了同样的问题。

建议即使在图书馆项目中也要使用活动上下文。有许多组件只需要活动上下文。例如:对话。因此,我的建议是将活动上下文从项目传递到库项目。

尽管Application上下文可以保存库项目中的序列化问题。