c# - 为什么关闭的 Android Activity 似乎保留对象?

标签 c# android android-fragments xamarin xamarin.android

第一次来这里提问。 我有一个使用 Xamarin 开发的简单 Android 应用程序。 在主要 Activity 中,我有一个按钮可以启动第二个 Activity ,其中包含选项卡 View 排列中的 2 个 fragment 。 我关闭该 Activity ,使用后退按钮或调用 finish()。 使用调试器,当我再次启动第二个 Activity 时,我注意到 fragment 中声明的所有对象都不为 null,并且似乎仍被实例化。 为什么会这样,再次启动 Activity 不应该像我第一次启动一样吗?我错过了什么? 谢谢。

最佳答案

垃圾收集器不会在您每次调用 finish 时清理您的对象,它会在内存已满和需要空间时清理对象。因此,如果您没有在 OnDestroy() 方法中为您的对象赋予值“null”,则当您重新启动第二个 Activity 时,它们可能仍然存在。将您的对象放在您的 Activity 中为 null 并不能保证垃圾收集器会更快地收集它们,但它会帮助 GC 确定可以从内存中删除该 Activity 。

有一些类型的对象声明你需要小心,因为它们可以创建一个对你的类的引用,这个引用永远不会被设置为 null,这将导致你的应用程序内存泄漏( Activity 不能从堆,并不断重新创建)。 Here是关于如何避免内存泄漏的一些指示!

有一个关于内存管理和对象生命周期的有趣谈话 here .我建议你也检查一下!希望这会有所帮助。

关于c# - 为什么关闭的 Android Activity 似乎保留对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25230204/

相关文章:

c# - 找不到文件异常发生

android - 刷新 ViewPager fragment 无法正常工作

android - 当 Fragment 再次可见时设置标题

Android LocationManager 泄漏内存

android - 滚动时只使用一次动画

C#/VB.Net - 枚举路径

c# - 在 C# 中创建代理到真实 Winforms 文本框的无窗口、可缩放文本区域

c# - VS Code 无法在 Ubuntu 中找到 .Net 6 - 无法编译和运行应用程序

android - 在 android 中调用 Intent.ACTION_VIEW 后返回

java - 通过 Activity 开关传递信息