【问题标题】:Android FLAG_NEW_TASK and FLAG_SINGLE_TOP activity not garbage collectedAndroid FLAG_NEW_TASK 和 FLAG_SINGLE_TOP 活动没有被垃圾收集
【发布时间】:2014-12-20 23:21:57
【问题描述】:

我的应用程序有问题。

我从活动的上下文之外开始一个活动,所以我必须用 FLAG_NEW_TASK 标记它(否则我会收到一个异常告诉我必须添加标记)。

我遇到的问题是,在调用 onDestroyed 之后,活动及其视图没有被垃圾收集,所以每次活动启动时,它都会要求更多内存,并且在一段时间后,它会遇到 OutOfMemory 异常。

我使用 MAT 来分析内存,它告诉我内存中有 X 个活动实例,X 是活动已启动的次数。

我没有对活动或其持有的视图的任何静态引用

有什么方法可以正确收集活动垃圾,还是我不知道关于我正在使用的标志的任何事情?

谢谢

编辑 1

我发现解决此问题的唯一方法是将活动置于其自己的进程中,并在活动完成时终止该进程。但我知道这根本不是正确的方法......

【问题讨论】:

    标签: android garbage-collection out-of-memory flags


    【解决方案1】:

    如果对您的活动的引用仍然存在,则可能会发生这种情况。发生这种情况的方式有很多——最常见的一种是让 AsyncTask 仍在运行。

    以下是 Handler 内部类的活动泄漏示例:http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html

    【讨论】:

    • 似乎不是我的问题。我已经删除了任何 post/postDelayed、异步任务和任何匿名类创建,但仍然有同样的问题
    • 找到问题所在。我使用的 DigitalClock 永远不会取消注册,因此它阻止了 GC 收集它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    相关资源
    最近更新 更多