hi,同行们
本人最近在做一个项目,项目里有差不多250张图片,我把这些图片都缓存在了应用程序的目录下(data/data), 我已经对这些图片进行了缩放,以及及时回收,可还是会出现OOM的问题。我想确认一点:这与我把这些图片缓存在应用程序目录下有没有关系,应用程序目录存放图片,有没有大小限制?? thanks
本人最近在做一个项目,项目里有差不多250张图片,我把这些图片都缓存在了应用程序的目录下(data/data), 我已经对这些图片进行了缩放,以及及时回收,可还是会出现OOM的问题。我想确认一点:这与我把这些图片缓存在应用程序目录下有没有关系,应用程序目录存放图片,有没有大小限制?? thanks
解决方案 »
- read 读取0字节产生 unexpected end of stream问题
- VideoView播放视频过程中视频停止播放的问题求解
- android系统gps接收卫星信号问题
- 手机网页是用什么开发的 和手机的操作系统有关吗
- android中gridview的点击事件
- 【Android】SQLite 数据库查询问题
- 怎样在ListView里实现ListItem的拖拽效果?
- 关于android 程序内存问题,求解?
- linux安卓开发环境
- 和资深android玩家了解下前景
- android 中如何加入图片
- 请问为什么用reboot -p关机后,超级终端仍输出数据:Restarting tasks...
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,鬼晓得那是多久