【问题标题】:Why using Activity context cause Context memory leak为什么使用 Activity 上下文会导致 Context 内存泄漏
【发布时间】:2014-10-18 12:32:01
【问题描述】:

我在 Google 上多次搜索“使用 Application ContextActivity Context”。

大部分答案是:“尽可能使用应用上下文getApplicationContext()来防止上下文内存泄漏”。

我很困惑:

为什么使用 Activity 上下文可能会导致内存泄漏:

Activity上下文与活动相关联,如果活动被销毁,则可以被销毁”

但是

应用程序上下文与应用程序相关联,并且在应用程序的整个生命周期中始终保持不变——它不会改变”?

【问题讨论】:

    标签: android memory android-activity memory-leaks android-context


    【解决方案1】:

    Activity 实例是暂时的:它们根据用户与您的应用程序的交互来来去去。您的应用程序总体上有一个 Application 实例,该实例在您的应用程序进程的整个生命周期中都存在。举个简单的例子:用户通过启动器(主屏幕)启动您的应用程序,您的MainActivity 被创建并启动。如果这是第一次启动,那么您的应用程序的进程也会启动一个 Application 上下文。用户按下BACK 键,您的MainActivity 退出,通过其onDestroy()。现在,如果用户重新启动您的应用程序,则会创建一个新的 MainActivity 实例。但是,您的应用程序的进程没有被杀死(假设没有内存压力),因此 Application 对象单例仍然存在并且有效。您原来的 MainActivity 实例不存在。

    【讨论】:

    • 因为我的“原始MainActivity”已退出,所以所有引用/变量然后内存也会被释放?
    • 不一定,这是内存泄漏问题的根本原因。如果您将活动用作与活动的生命周期无关的内容的上下文,然后您的活动被销毁(生命周期),则垃圾收集器无法丢弃您的 Activity 对象,因为仍然持有强引用.有关更多详细信息,请查看此 Google Android 开发者博客:android-developers.blogspot.com/2009/01/…
    猜你喜欢
    • 1970-01-01
    • 2012-02-09
    • 2013-07-12
    • 1970-01-01
    • 2017-02-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多