gpt4 book ai didi

java - 在退出时清理程序并处理 GC

转载 作者:太空宇宙 更新时间:2023-11-03 13:37:54 25 4
gpt4 key购买 nike

我正在编写一个涉及大量图像的程序,每个屏幕密度超过 100 张。幸运的是,它们在空间方面不是很大。我在任何时候都使用大约 11 个。我还在每张似乎占用大量内存的图像上使用函数 Bitmap.createScaledBitmap

到目前为止,在调试这个应用程序时,我似乎能够无限期地使用它而不会遇到内存问题,我希望这意味着我不会泄漏内存。

但是,我注意到的一件事是,如果我通过后退按钮“退出”我的应用程序(我没有在后台运行任何东西),然后不久之后重新启动应用程序,我有时会退出调用 Bitmap.createScaledBitmap

时出现内存错误
01-07 19:01:24.935: ERROR/AndroidRuntime(27419): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

所以基本上我的问题是,我在这里做错了什么?我是否需要清理自己的垃圾,就像在用户按下后退按钮时在 onDestroy 中一样?我原以为当按下后退按钮并且 Activity 被销毁时,GC 会自动处理这个问题。这让我相信我做错了其他事情,比如内存泄漏。但后来我回过头来,我的应用程序可能会占用大量内存 20 分钟,但在重启后 5 秒内自行终止,这让我感到困惑。

谢谢大家。

编辑:我实现了一些快速而肮脏的修复。

我首先尝试了这个,但很难让应用程序强制关闭。

@Override
public void onBackPressed() {
finish();
}

接下来,我尝试将其与 onBackPressed 结合使用,但我无法再重复我的问题。请注意,方法调用只是一个基本上执行 allImages = null;

的循环
protected void onStop () {
super.onStop();
mComponent.releaseImages();
}

此时看来,在调用 finish() 之后,内存中仍有来自 Activity 的对象。比较奇怪。

最佳答案

也许您对应用程序的 Android 生命周期有一些误解。按后退按钮不会终止您的 Java 程序。因此,再次启动您的应用确实会启动一个新应用。

参见 http://developer.android.com/guide/topics/fundamentals.html#actlife

例如,如果您在 onStart() 中创建图像但不在 onStop() 中删除它们,您仍然拥有对图像的引用。每次都会增加更多的内存。

关于java - 在退出时清理程序并处理 GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4631475/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com