我的应用程序有问题。
我正在从 Activity 上下文之外开始一个 Activity ,所以我必须用 FLAG_NEW_TASK 标记它(否则我会收到一个异常告诉我必须添加标记)。
我遇到的问题是 Activity 及其 View 在调用 onDestroyed 后未被垃圾回收,因此每次 Activity 启动时,它都会请求更多内存,并且在一定时间后,它会遇到 OutOfMemory 异常。
我使用 MAT 来分析内存,它告诉我内存中有 X 个 Activity 实例,X 是 Activity 开始的次数。
我没有对 Activity 或其持有的 View 的任何静态引用
有什么方法可以正确地收集 Activity 垃圾,或者有什么我不知道的关于我正在使用的标志的吗?
谢谢
编辑 1
我发现解决这个问题的唯一方法是将 Activity 放在它自己的进程中,并在 Activity 完成时终止进程。但我知道这根本不是正确的方法......
最佳答案
如果对您的 Activity 的引用仍然存在,则可能会发生这种情况。发生这种情况的方式有很多种 - 最常见的一种是让 AsyncTask 仍在运行。
这是一个来自 Handler 内部类的 Activity 泄漏示例:http://www.androiddesignpatterns.com/2013/01/inner-class-handler-memory-leak.html
关于Android FLAG_NEW_TASK 和 FLAG_SINGLE_TOP Activity 未被垃圾收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27585280/