hi,同行们
本人最近在做一个项目,项目里有差不多250张图片,我把这些图片都缓存在了应用程序的目录下(data/data), 我已经对这些图片进行了缩放,以及及时回收,可还是会出现OOM的问题。我想确认一点:这与我把这些图片缓存在应用程序目录下有没有关系,应用程序目录存放图片,有没有大小限制?? thanks
本人最近在做一个项目,项目里有差不多250张图片,我把这些图片都缓存在了应用程序的目录下(data/data), 我已经对这些图片进行了缩放,以及及时回收,可还是会出现OOM的问题。我想确认一点:这与我把这些图片缓存在应用程序目录下有没有关系,应用程序目录存放图片,有没有大小限制?? thanks
12M 左右,app就很容易出现OOM了
12M 左右,app就很容易出现OOM了
android定义的heapsize是16M,但是图片到了8M就会OOM我也试了很多种方法,OOM一直存在,不能完美解决
250张图片都要读到内存中吗?如果是的话那根本无解 一个进程最多就16m
不过如果保存在文件夹中那是没问题的
android这本来就做得很坑爹 这就是我讨厌java的原因,没本事把内存管理好,就把内存的控制权交还给程序员啊。苹果就做了两套,可以选择GC或者是引用计数。
另外,“不过我还是没有找到一个很好的方法解决图片OOM的问题,softReference貌似也不是很好用 ”,即使你recycle也没用,问题不是那么简单的。因为读取图片的时候,有时候你调用的是java的方法,有时候是native的,但内存16m是分配给java和c的,而最关键的一点是,分配给java后就无法再分配给c了。所以,native可使用的内存 = 16m - java峰值。即便虚拟机将内存回收,也无法再重新分配给c了。
而且他用gc和recycle的时机也很诡异,不是用了之后马上回收,像 c++ 的 free 或者 c 的 delete
而是要等下一个系统gc,鬼晓得那是多久