在做的一个项目中有多个GridView来展示图片,现在经常遇到的问题是正常切换完几个Activity后,程序就oom异常了,现在我的一种做法是,在Activity finish之前添加recycle掉该Activity中GridView的所有图片,但这样做似乎没什么效果,请问一下坛友ListView或者GridView常用的优化技巧有哪些呢?

解决方案 »

  1. 1、ConvertView的重用,这个最重要,绝大部分的OOM原因是new了太多的ConvertView造成的。
    2、ListView和GridView尽量在xml文件中规定大小,尽量不要使用代码对ListView和GridView的宽和高进行更改。不能直接使用相对布局来控制ListView和GridView的大小,否则会不断的进行创建。
    3、及时回收多余的或者不用的对象来减少内存消耗,多使用软引用和弱引用。
      

  2. 可以在Adapter的getView方法里面加LOG来进行测试,查看手机一屏显示的VIEW实际数量与LOG次数是否相同,如果LOG比实际数量多很多,那就有可能是我说的1和2的问题,检查一下。
      

  3. 展示图片的话,OOM很有可能是使用bitmap造成的。可以用软引用来解决,楼主可以自己google一下。
      

  4. 在activity结束前把所有的图片都recycle掉
      

  5. 推荐楼主看一下这篇文章:http://developer.android.com/training/displaying-bitmaps/index.html
      

aliyun

类似问题 »