Android - 位图操作,保留源位图或使用第二个位图和回收源

时间:2015-01-04 17:34:57

标签: android bitmap recycle

有人会认为第二种方法会更有效率,但我不能说我看到使用它有任何改进。以下两个之间有区别吗? (memmory wise ofcourse)

Bitmap bm=MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), id, MediaStore.Images.Thumbnails.MINI_KIND, null);
bm=cropAndScaleBitmap(bm);
//use bm

VS

Bitmap bm=MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), id, MediaStore.Images.Thumbnails.MINI_KIND, null);
Bitmap b =cropAndScaleBitmap(bm);
bm.recycle();
//use b

2 个答案:

答案 0 :(得分:0)

这里要注意的事情......

  

即使您指定了回收,它也只会有效   当下一个GC被触发时。

其他需要注意的事项

  1. 在前Honeycomb版本的Android中,位图的内存是从非托管内存中分配的。至少需要2次GC才能收集它。另一件事是 - 它真的很难追踪 - DDMS没有看到它,也没有MAT。

  2. 阅读此链接https://developer.android.com/training/displaying-bitmaps/manage-memory.html。如果api级别> 10,我认为我们不需要调用再循环。

  3. 请参阅此链接...它提供了有关如何逐步实施的所有详细信息和代码示例。

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

    希望这有帮助。

答案 1 :(得分:0)

在您的具体示例(第一个)中,您实际上并未重用源,您只需覆盖bm的值,使其指向新的位图,在这种情况下,您无法再调用{ {1}}在源位图上,因为您不再具有对它的引用。

我建议使用第二种方法确保源位图被回收。