首页 > 安全资讯 >

在android上实施不会OOM的内存管理方案

11-10-31

很多人埋怨在android上当listview里面加载大量图片,并且还有其它页面加载比listview里面更大的图片,大量不同类型的图片在一起,又要兼顾用户体验,这个时候应用程序就经常OOM,让人好不烦恼。下面是2种经过压力...

 

很多人埋怨在android上当listview里面加载大量图片,并且还有其它页面加载比listview里面更大的图片,大量不同类型的图片在一起,又要兼顾用户体验,这个时候应用程序就经常OOM,让人好不烦恼。下面是2种经过压力测试还能很坚挺的方法,供大家参考,指正:

 

方案一.简单链表+软引用管理方式

1.定义一个单实例的类(e.g. EstoreCacheManager),用饿汉方式初始化;

 

2.定义一个LinkedHashMap 和软引用,将链表和软引用绑定:

    private SoftReference mImageReference;

    private LinkedHashMap mImageMap;

 

    mImageMap = new LinkedHashMap();

    mImageReference = new SoftReference(mImageMap );

}

 

3.在做插入操作的时候,判断LinkedHashMap的size大小是否超过一个设定的值(e.g.:200张),然后删除一张最老的,再做插入;

 

4.另外在下载图片的地方,做异常捕获:

{

    try {

        mBitmap = loadImageByUrl(url);

    } catch (OutOfMemoryError e) {

        // The VM does not always free-up memory as it should,

        // so manually invoke the garbage collector

        // and try loading the image again.

         System.gc();

         mBitmap = loadImageByUrl(url);

       }

}

 

方案二:复杂LRU方法管理(通过修改和优化一个开源库来实现)

参看我曾经为新手写一个demo'项目和源代码:

http://code.google.com/p/androidforyouku

 

摘自androidzhaoxiaogang的专栏

相关文章
最新文章
热点推荐