Android FLAG_NEW_TASK 和 FLAG_SINGLE_TOP Activity 未被垃圾收集

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

我的应用程序有问题。

我正在从 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/

相关文章:

android - 如何在ViewGroup中使用addView?

Android BUCK 构建错误

java - 如何对与系统(或 Android)类交互的方法进行单元测试

java - 使用收集器使用临时变量

Android:如何使用opencv获得良好的canny边缘检测的高低阈值

c# - linq 查询中的垃圾回收

c++ - 如何在ubuntu上捕获内存不足异常

opencv - GpuMat 的可用内存

c# - 为什么我一直收到 'System.OutOfMemoryException' ?

java - 如何调试为什么在 GC 期间停止线程花费了这么长时间?