gpt4 book ai didi

android - 在创建位图后调用 recycle() 和 destroyDrawingCache() 是个好主意吗?

转载 作者:行者123 更新时间:2023-11-29 21:41:59 24 4
gpt4 key购买 nike

在我的 Android 应用程序中,我有一个函数可以从 ImageView 和 TextView 获取位图,然后将其保存到 SDCard。在该函数的末尾,我目前正在位图对象上调用 recycle() 并在 ImageView 上调用 destroyDrawingCache(),如下所示:

b1.recycle();
bitmap.recycle();
imgView.destroyDrawingCache();

b1和bitmap是Bitmap对象,是局部变量。 imgView 是一个 ImageView 对象,它是一个字段。 imgView 在应用程序运行时经常被重新创建。包括这三行代码,在性能和内存方面是个好主意吗?或者垃圾收集器是否会自动完成工作,以便包含它们只会减慢应用程序的速度,因为它必须进行三个方法调用?

最佳答案

引用文档

http://developer.android.com/training/displaying-bitmaps/manage-memory.html

在 Android 2.3.3(API 级别 10)及更低版本上,建议使用 recycle()。如果您在应用程序中显示大量位图数据,您很可能会遇到 OutOfMemoryError 错误。 recycle() 方法允许应用尽快回收内存。

Android 3.0(API 级别 11)引入了 BitmapFactory.Options.inBitmap 字段。如果设置了此选项,则采用 Options 对象的解码方法将在加载内容时尝试重用现有位图。这意味着位图的内存被重用,从而提高了性能,并消除了内存分配和取消分配。在 honeycomb 和更高版本中,位图像素数据分配在堆上。所以在这种情况下你不需要调用回收。当 gc 启动时,它将释放为位图分配的内存。

释放内存是垃圾收集器的工作。当它需要回收内存时,垃圾收集器就会启动。GC deos mark and sweep。你可以检查logcat。

您可以看到暂停时间。更大的堆会更频繁地启动 gc 和更频繁的暂停时间。

 GC_CONCURRENT freed <1K, 14% free 21220K/24455K, paused 6ms+26ms
GC_CONCURRENT : Jumps in because Heap is full
14% free 21220K/24455K After this collection 14% of memory is free. Check the heap usage.
paused 6ms+26ms Time taken to collect garbage.

@ https://www.youtube.com/watch?v=_CruQY55HOk 有一个关于这个话题的演讲

关于android - 在创建位图后调用 recycle() 和 destroyDrawingCache() 是个好主意吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16822180/

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