Bitmap的使用习惯——及时释放Bitmap占用的内存
2014-08-19 10:43
232 查看
在上一篇文章已经说过,Btimap是一个吃内存的大家伙,所以我们需要养成一个好的习惯,才能更好的驾驭Bitmap,让其对内存的占用变得合理起来。在这里,主要说明一下:什么时候需要释放Bitmap,如何释放Bitmap占用的内存。
当Bitmap不再需要使用时,我们应该回收它占用的内存,如果我们直接把指向bitmap的引用置null的话,这样bitmap还是会存在内存中,直到GC机制起作用时,才可能会把这个bitmap回收。这样并不能达到我们想要的目标,及时释放掉这份没用的内存。那么,释放的方法很简单:
另外,在这里也介绍一下简单的ImageView的优化:
使用ImageView时,如果要显示的图片很大,达到1M甚至更大,而需要展示在屏幕上的宽高并不大。那么直接把这个图片设置给ImageView将会造成不必要的内存浪费。此时,就可以使用以下方法来优化了:
先把图片读出来生成Bitmap对象,然后再把这个对象进行宽高缩小,把它的实际宽高缩小成我们指定的宽高,这个宽高可以是你ImageView的实际宽高,这样就能够使到要展示的图片在ImageView中显示不会失真,也能够使其占用的内存降低,达到优化内存的目的。当然,在我们不再需要这张图片Bitmap时,我们就可以使用前面讲到的方法释放掉Bitmap占用的内存了。
当Bitmap不再需要使用时,我们应该回收它占用的内存,如果我们直接把指向bitmap的引用置null的话,这样bitmap还是会存在内存中,直到GC机制起作用时,才可能会把这个bitmap回收。这样并不能达到我们想要的目标,及时释放掉这份没用的内存。那么,释放的方法很简单:
bm.recycle(); // 回收bitmap的内存 bm = null;此时就能够回收没用的bitmap占用的内存了。
另外,在这里也介绍一下简单的ImageView的优化:
使用ImageView时,如果要显示的图片很大,达到1M甚至更大,而需要展示在屏幕上的宽高并不大。那么直接把这个图片设置给ImageView将会造成不必要的内存浪费。此时,就可以使用以下方法来优化了:
imageView = new ImageView(mContext); // 按实际的大小生成的Bitmap Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), mImageIds[arg0]); bm = Bitmap.createScaledBitmap(bm, width, height, false); // 给ImageView设置资源 imageView.setImageBitmap(bm);
先把图片读出来生成Bitmap对象,然后再把这个对象进行宽高缩小,把它的实际宽高缩小成我们指定的宽高,这个宽高可以是你ImageView的实际宽高,这样就能够使到要展示的图片在ImageView中显示不会失真,也能够使其占用的内存降低,达到优化内存的目的。当然,在我们不再需要这张图片Bitmap时,我们就可以使用前面讲到的方法释放掉Bitmap占用的内存了。
相关文章推荐
- Bitmap的使用习惯——及时释放Bitmap占用的内存
- oc-内存管理之自动释放--我自动释放了我使用的所有对象,但程序占用内存还是偏高,为什么?
- w3wp.exe的内存及CPU占用不能及时释放
- GridView内存及时释放,不需要使用软引用
- 在IIS6下w3wp.exe的内存及CPU占用不能及时释放问题
- 手机 内存优化: bitmap 占用 多大内存;使用bitmap=null;bitmap.recycle();的好处
- 使用不安全代码将 Bitmap 位图转为 WPF 的 ImageSource 以获得高性能和持续小的内存占用
- 转(w3wp的内存占用不能及时释放)
- C++备忘 STL释放内存 ,weka使用备忘
- 良好的动态内存申请和释放习惯
- [ZT]释放SQL Server占用的内存
- 解决Firefox内存占用不释放的问题
- 讨教:WINCE 开发中,如何让.net程序及时地释放内存,如何可以节省内存?
- 关于释放ASPNET进程的内存占用问题.
- 使用CreateCompatibleBitmap多次后出现内存不足的解决方法
- 关于QTableWidgetItem占用内存的释放
- PS,TOP,PIDSTAT -R 等看的单个进程内存占用不准-----理解Linux上的内存使用
- 如何释放sqlservr.exe所占用的内存?
- 释放SQL Server占用的内存
- 使用Singleton需要考虑内存释放