3

在这篇文章中

何时调用活动上下文或应用程序上下文?

马克墨菲 说

“如果来自 getApplicationContext() 的 Context 保留了由您对它的调用创建但您没有清理的东西,它可能会造成内存泄漏。对于 Activity,如果它保留了某些东西,一旦 Activity 被垃圾收集,其他一切也冲出。应用程序对象在您的进程的生命周期内保持不变。“

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

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

我认为这可能是使用应用程序上下文更可取的场合之一?

4

2 回答 2

1

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

此外,如果一个活动被关闭,它会放弃它的窗口令牌。尝试使用该上下文生成一个对话框将给出一个BadTokenException. 因此,如果对象不直接与活动生命周期相关联,那么将活动上下文赋予对象是没有意义的。

编辑:这是一个可靠的来源

于 2012-06-27T12:26:45.947 回答
0

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

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

尽管应用程序上下文可以节省库项目中的序列化问题。

于 2012-06-27T11:04:01.017 回答