gpt4 book ai didi

android - 使用后是否需要调用 Bitmap.recycle() (在Android中)?

转载 作者:可可西里 更新时间:2023-11-01 19:03:24 27 4
gpt4 key购买 nike

根据 Bitmap.recycle() 的 Android 引用文档:

Free the native object associated with this bitmap, and clear the reference to the pixel data. This will not free the pixel data synchronously; it simply allows it to be garbage collected if there are no other references. The bitmap is marked as "dead", meaning it will throw an exception if getPixels() or setPixels() is called, and will draw nothing. This operation cannot be reversed, so it should only be called if you are sure there are no further uses for the bitmap. This is an advanced call, and normally need not be called, since the normal GC process will free up this memory when there are no more references to this bitmap.

但是,我读过的很多书都建议通过调用 Bitmap.recycle() 来释放内存,一旦确定不再需要它。

弄得我很疑惑:Bitmap.recycle()用完还需要调用吗?

最佳答案

视情况而定。

如果您在 Android 3.0 及更高版本上运行您的应用程序,则不需要它,因为 GC 会完美地处理它。

但是,如果您在旧版本上运行您的应用程序,由于 GC 无法很好地监控位图(它认为它们是引用的大小),您可能会出现 OOM,如 Google IO 讲座 here 中所示。

无论如何,仍然建议您在确定不再需要该位图后立即调用回收。它甚至适用于新的 android 版本,因为它减少了自动内存管理所需的工作...

事实上,我记得我问过类似的问题 here

此外,如果您需要使用 JNI 对位图进行额外控制,请查看 this post

所以,简而言之,答案是不再需要,但仍然推荐。


编辑:从 Android 8.0 开始,位图存储在 native 内存中,因此更难达到 OOM。事实上,这在技术上是不可能的,因为你会陷入其他问题。有关此的更多信息,请参见 here

关于android - 使用后是否需要调用 Bitmap.recycle() (在Android中)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18452192/

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