有人会认为第二种方法会更有效率,但我不能说我看到使用它有任何改进。以下两个之间有区别吗? (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
答案 0 :(得分:0)
这里要注意的事情......
即使您指定了回收,它也只会有效 当下一个GC被触发时。
其他需要注意的事项
在前Honeycomb版本的Android中,位图的内存是从非托管内存中分配的。至少需要2次GC才能收集它。另一件事是 - 它真的很难追踪 - DDMS没有看到它,也没有MAT。
阅读此链接https://developer.android.com/training/displaying-bitmaps/manage-memory.html。如果api级别> 10,我认为我们不需要调用再循环。
请参阅此链接...它提供了有关如何逐步实施的所有详细信息和代码示例。
https://developer.android.com/training/displaying-bitmaps/manage-memory.html
希望这有帮助。
答案 1 :(得分:0)
在您的具体示例(第一个)中,您实际上并未重用源,您只需覆盖bm
的值,使其指向新的位图,在这种情况下,您无法再调用{ {1}}在源位图上,因为您不再具有对它的引用。
我建议使用第二种方法确保源位图被回收。