hi,同行们
    本人最近在做一个项目,项目里有差不多250张图片,我把这些图片都缓存在了应用程序的目录下(data/data), 我已经对这些图片进行了缩放,以及及时回收,可还是会出现OOM的问题。我想确认一点:这与我把这些图片缓存在应用程序目录下有没有关系,应用程序目录存放图片,有没有大小限制??     thanks

解决方案 »

  1.   

    OOM只是内存里面的图片多了才会出错把图片放在应用程序目录下是没问题的,只要手机装得下不过我还是没有找到一个很好的方法解决图片OOM的问题,softReference貌似也不是很好用 
      

  2.   

    我也感觉softReference效果是有的,但是不能完全解决oom的问题。不知道是不是我用错了,hi,你有没有发现:项目中:Runtime.getRuntime().totalMemory()得到的数值会不断增加,有人说,这个数值如何增加,就代表内存有泄漏,我试了很多种方法,都不能做到,让这个数值不再增加,当它增加到
    12M 左右,app就很容易出现OOM了
      

  3.   

    hi,你有没有发现:项目中:Runtime.getRuntime().totalMemory()得到的数值会不断增加,有人说,这个数值如果增加,就代表内存有泄漏,我试了很多种方法,都不能做到让这个数值不再增加,当它增加到
    12M 左右,app就很容易出现OOM了
      

  4.   


    android定义的heapsize是16M,但是图片到了8M就会OOM我也试了很多种方法,OOM一直存在,不能完美解决
      

  5.   


    250张图片都要读到内存中吗?如果是的话那根本无解 一个进程最多就16m
    不过如果保存在文件夹中那是没问题的
    android这本来就做得很坑爹 这就是我讨厌java的原因,没本事把内存管理好,就把内存的控制权交还给程序员啊。苹果就做了两套,可以选择GC或者是引用计数。
    另外,“不过我还是没有找到一个很好的方法解决图片OOM的问题,softReference貌似也不是很好用 ”,即使你recycle也没用,问题不是那么简单的。因为读取图片的时候,有时候你调用的是java的方法,有时候是native的,但内存16m是分配给java和c的,而最关键的一点是,分配给java后就无法再分配给c了。所以,native可使用的内存 = 16m - java峰值。即便虚拟机将内存回收,也无法再重新分配给c了。
      

  6.   


    而且他用gc和recycle的时机也很诡异,不是用了之后马上回收,像 c++ 的 free 或者 c 的 delete
    而是要等下一个系统gc,鬼晓得那是多久
      

  7.   

    http://apps.hi.baidu.com/share/detail/34007380
      

  8.   

    以前跟你的问题一样,不过看到gallery能显示那么多图片没问题,就找了gallery的源码,通过修改gallery的源码解决的这个问题