2015-01-04 3 views
0

Можно было бы подумать, что второй подход будет более эффективным, но я не могу сказать, что вижу улучшения, используя его. Есть ли разница между следующими двумя? (Memmory мудрый конечно)Android - растровые операции, сохранение растрового изображения источника или использование второго растрового изображения и источника повторного использования

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

против

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

ответ

0

вещи отметить здесь ...

Даже если вы указали рециркуляция, он будет иметь какой-либо эффект только , когда следующий GC тригерред.

Другие вещи, чтобы отметить

  1. В предварительно Honeycomb версии Android память для растровых изображений был (есть) выделяется из неуправляемого memory.It займет по меньшей мере 2 проходов GC, чтобы забрать его. Другое дело - это очень сложно отследить - DDMS не видит этого и не делает MAT.

  2. Прочитать эту ссылку https://developer.android.com/training/displaying-bitmaps/manage-memory.html. Если уровень api> 10, я не думаю, что нам нужно вызвать переработку.

Ссылка на эту ссылку ... Он содержит все детали и пример кода для того, как реализовать шаг за шагом.

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

Надеется, что это помогает.

0

В вашем конкретном примере (первый один) вы на самом деле не повторно использовать источник, вы просто перезаписать значение bm делаете его указывать на новое растровое изображение вместо этого, в этом случае вы можете больше не называть recycle на источнике растровое изображение, поскольку у вас больше нет ссылки на него.

Я рекомендую использовать второй метод, чтобы убедиться, что исходное растровое изображение переработано.

Смежные вопросы