在这篇文章中
When to call activity context OR application context?
Mark Murphy说
“它可以创建内存泄漏,如果来自getApplicationContext()的Context保留在你不调整它的调用所创建的东西上。使用Activity,如果它保留某些东西,一旦Activity被垃圾收集其他所有内容都会刷新.Application对象在您的进程生命周期内仍然存在。“
什么调用创建应用程序上下文保留的东西?
我有一个需要各种事物上下文的库。它可以在后台运行并跨越活动,但使用和更新活动上下文会有问题。
我认为这可能是使用应用程序上下文的首选之一?
答案 0 :(得分:1)
如果库中对象的生命周期可以跨越多个活动,那么绝对使用应用程序上下文。使用活动上下文可防止垃圾收集器抛弃上下文。由于活动上下文可以保留相当多的数据,因此您的内存使用量会急剧增加。
此外,如果活动已关闭,则会放弃其窗口令牌。尝试使用该上下文生成对话框将得到BadTokenException
。因此,如果对象与活动生命周期没有直接联系,那么就没有必要将活动上下文赋予对象。
答案 1 :(得分:0)
在我的一个图书馆项目中,我遇到了同样的问题。
建议即使在图书馆项目中也要使用活动上下文。有许多组件只需要活动上下文。例如:对话。因此,我的建议是将活动上下文从项目传递到库项目。
尽管Application上下文可以保存库项目中的序列化问题。