android - Activity 被销毁后对象仍在内存中

标签 android

我的 Activity 保留了一定数量的引用,用于在 Map 对象中预览来自相机的图像。这需要大量内存。我正在使用以下方法监控内存使用情况:

    Runtime runtime = Runtime.getRuntime();
    long allocated = runtime.totalMemory();
    long free = runtime.freeMemory();
    long used = allocated  - free;

当我终止我的应用程序(后退键)时, Activity 将被销毁。当我再次启动我的应用程序时,我可以看到内存没有被清除。 “已用”数字从相同的值开始,然后随着新帧的到来而上升。

当我在“Dump HPROF”后查看“dominator_tree”时,我可以看到我的 Activity 的两个实例,都占用了大量内存。

当我覆盖 onDestroy() 和 clear() 预览帧 map 对象时,这似乎没有发生。

我可能在这里遗漏了一些东西,但我认为在我的 Activity 被销毁后(在垃圾收集过程之后)应该释放所有内存,为什么我必须手动清除() map ?我创建的其他对象似乎不需要这个。

我尝试设置 android:launchMode="singleInstance"但这似乎没有任何影响。

谢谢!

最佳答案

为了了解发生了什么,在支配树中,在您的 Activity 上单击右键,查找 GC ROOT 的路径并选择排除弱/软/幻影引用的选项。这会让您了解为什么系统无法破坏您的 Activity (如果您正在泄漏某些东西或其他东西)

关于android - Activity 被销毁后对象仍在内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7764133/

相关文章:

android - 我想在我的警报对话框中显示确定和取消按钮吗?

javascript - Cordova 应用程序正在为 Android 上的所有 XMLHttpRequests 获取 404

android - Android Studio 中 gradle 依赖与 java import 语句之间的区别

android - "@aar"在 gradle 'compile' 任务中是什么意思

android - 如何有效地在OpenGL ES中加载纹理

java - 将 json 数据写入和读取到内部存储 android

java - 随机答案的可能性

Android模拟器拒绝启动

android - Android productFlavors 是否需要在谷歌开发控制台中单独应用?

java - Java中如何保证同一时间只有一个请求