`

android回收图片使用内存

 
阅读更多

在android开发过程当中,如果要用到大量图片而你又没有做好图片内存的回收,很容易就会造成OOM内存溢出的问题。下面介绍一种图片内存回收的方法,就是将图片从添加到的ViewGroup中一张一张拿出来回收,具体代码如下:

private void recycleBitmap( )

{

   if(viewGroup != null)

   {

         int count =  viewGroup.getChildCount;

         for(int i=0; i <count; i++ )

          {

             View view = viewGroup.getChildAt(i);

             ImageView img = (ImageView)view.findViewById(R.id.Image);

              if(img != null)

               {

                   Drawable drawable = img.getDrawable( );

                   if(drawable != null)

                    {

                            if(drawable instanceof BitmapDrawable)

                             {

                               BitmapDrawable bitmapDrawable = (BitmapDrawable)drawable;

                                Bitmap bitmap = bitmapDrawable.getBitmap( );

                                if(bitmap != null)

                                   bitmap.recycle( );

                              }

                     }

 

                }

 

            }

 

    }

 

 

}

其中的ViewGroup可以是ViewFlipper、ViewPager等等继承自ViewGroup的子类

有 时一个activity finish退出程序后重新进入会报oom内存溢出强制关闭程序这是因为activity虽然已经destroy掉了但它所占有 的内存还没有释放,这时你要看下是不是哪个ViewGroup添加了许多图片没有释放,你可以在onDestroy中将ViewGroup中的 view remove掉ViewGroup.removeAllViews()就可以了。

分享到:
评论

相关推荐

    Android有效解决加载大图片时内存溢出的问题

    Android有效解决加载大图片时内存溢出的问题

    android 网络图片双缓存

    Android每次加载图片很浪费时间。所以设计了一个图片缓存技术来解决每次android手机加载图片的问题 内存的读取速度是最快的,然后是文件的读取速度,最后是网络资源的读取 既然内存的读取时间最快,我们好好...

    Android加载SVGA图片

    Android端最初的SVGA Player是通过继承SurfaceView(TextureView)实现的的,但是SurfaceView...并且在使用SurfaceView绘制Bitmap时,还伴随着各种问题,包括内存回收、Activity生命周期以及UI层级各种牵扯不清的问题。

    Android代码-图片缓存的一种方法

    第二层缓存是在手机内存层,是将第一层的图片下载到手机内存,这种缓存读取速度非常快,但当图片内存被回收时,图片自然就不会存在了,第三层则是在手机硬盘层,是会缓存到sd卡。但这一层相对于内存的读取速度会慢很...

    大图片所引起的内存问题

    比如我在曾经的一个项目中遇到的问题:要使用Gallery来显示多张不同的图片,在给Gallery的每个Item设置图片的时候,想到Bitmap如果不手动的recycle,系统是不会回收它所在的资源的,因为android为了提高效率,bitmap...

    帧动画控件,优化帧动画加载的内存占用、解决帧动画销毁内存不释放的问题

    优化帧动画加载的内存占用、解决帧动画销毁内存不释放的问题 ...使用重复的内存区块读取图片,防止内存抖动,减轻申请内存区块,加快图片加载速率 使用内存缓存加载的图片,查看动画加载图片是否在内存中

    Android 常用六大框架

    没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档), 更好的管理bitmap内存。FinalBitmap可以自定义下载器,用来扩展其他协议显示网络...

    Picasso – Android系统的图片下载和缓存类库

    使用最少的内存完成复杂的图片转换,比如把下载的图片转换为圆角等 自动添加磁盘和内存缓存 具体介绍 在Adapter中下载 自动检测Adapter中的ImageView重用和取消不必要的下载 帮助 01.@Override public ...

    Android 图片缓存机制的深入理解

    这些组件通过重用已经移除屏幕的子视图来将降低内存的使用,垃圾回收器也会及时释放那些已经不再使用的已下载的图片,这些都是很好的方法,但是为了保持一个流畅的、快速加载的用户界面,就应该避免当再次回到某个...

    Android基于SoftReference缓存图片的方法

    本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下: Java中的SoftReference即对象的软引用。如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收它;如果内存空间...

    LruCache与图片的二次采样

    为了保证内存的使用始终维持在一个合理的范围,通常会把被移除屏幕的图片进行回收处理。此时垃圾回收器也会认为你不再持有这些图片的引用,从而对这些图片进行GC操作(garbage collection:垃圾回收)。用这种思路来...

    Android开发框架Afinal

    FinalBitmap的内存管理使用lru算法,没有使用弱引用(android2.3以后google已经不建议使用弱引用,android2.3后强行回收软引用和弱引用,详情查看android官方文档),更好的管理bitmap内存。FinalBitmap可以自定义...

    Android实现图片缓存与异步加载

    ImageManager2这个类具有异步从网络下载图片,从sd读取本地图片,内存缓存,硬盘缓存,图片使用动画渐现等功能,已经将其应用在包含大量图片的应用中一年多,没有出现oom。 Android程序常常会内存溢出,网上也有很多...

    Android避免内存溢出(Out of Memory)方法汇总

    避免内存溢出的方法,主要是对以下三个方面对程序进行优化...直到虚拟机报告内存不够时才会回收, 只要垃圾回收器没有回收它,该对象就可以被程序使用。软引用可用来实现内存敏感的高速缓存。 软引用可以和一个引用队列

    Android图片缓存之Bitmap详解(一)

    前言: 最近准备研究一下图片缓存... •public void recycle() // 回收位图占用的内存空间,把位图标记为Dead  •public final boolean isRecycled() //判断位图内存是否已释放   •public final int getWidth()//

    Android图片缓存之Lru算法(二)

    之前我们一直在使用SoftReference软引用,SoftReference是一种现在已经不再推荐使用的方式,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用变得不再可靠,...

    Android Universal ImageLoader 缓存图片

    Android上最让人头疼的莫过于从网络获取图片、显示、回收,任何一个环节有问题都可能直接OOM,这个项目或许能帮到你。Universal Image Loader for Android的目的是为了实现异步的网络图片加载、缓存及显示,支持多...

    Android代码-TestGlide

    高效缓存策略,支持Memory和Disk图片缓存,默认Bitmap格式采用RGB_565内存使用至少减少一半。 生命周期集成,根据Activity/Fragment生命周期自动管理请求。 高效处理Bitmap,使用Bitmap Pool使Bitmap复用,主动调用...

    基于android智能电视的瀑布流照片墙

    基于android智能电视的瀑布流照片墙,从百度API动态获取1000张图片资源,采用LruCache进行内存缓存,并做了缓存策略(先内存后本地再网络),也做了回收机制,但是没有上焦点框,同步上还有问题

    Picasso:强大的Android图片下载和缓存库-开源

    毕加索会自动处理Android上许多常见的图像加载陷阱:处理ImageView回收和适配器中的下载取消。 复杂的图像转换,使用最少的内存。 自动内存和磁盘缓存。 自动检测到适配器的重新使用,并且先前的下载被取消。 转换...

Global site tag (gtag.js) - Google Analytics