【发布时间】:2015-09-21 17:44:31
【问题描述】:
我有一个显示缩略图网格的应用程序。该应用程序将输入流解码为带有BitmapFactory.decodeStream() 的位图,以便显示每个缩略图。
我注意到当我向上/向下滚动的速度足够快时,如果 GC 超级活跃,这会使滚动变得生涩。
我试图隔离问题并编写了一个简单的应用程序,我在其中循环执行 10000 次 decodeStream() 调用,并注意到即使有足够的内存,GC 仍然会不断触发(即使我调用 bitmap.recycle()每次迭代后)。
问题:如何防止GC在执行BitmapFactory.decodeStream()时过于活跃?
【问题讨论】:
-
通常,缩略图的大小都相同,或者至少来自少数几个大小之一。在这种情况下,请在
BitmapFactory.Options上使用inBitmap以重用Bitmap对象,而不是回收它们。 -
inBitmap工作得非常好,GC 几乎闲置了。我正在测试 4.4.4。它是否会在 Android >=5.0 上提供相同的提升,或者对 L 进行的优化使得 inBitmap 的使用变得不必要(不值得增加复杂性)?
标签: java android bitmap garbage-collection bitmapfactory