当前位置: 代码迷 >> Android >> android LOG 中提醒Out of memory !
  详细解决方案

android LOG 中提醒Out of memory !

热度:56   发布时间:2016-04-28 05:48:00.0
android LOG 中提示Out of memory !!!!!
RT,程序运行一段时间就报Out of memory ,如下图所示


我是这样测试的,先打开一个Activity,当然我的Activity界面比较漂亮,有用到一些图片做背景,然后再关闭这个Activity,再打开,反复的可能测试了半个小时,就报这个错误了,每一次关闭Activity的时候我调用System.gc()垃圾回收一次,不过就算是这样还是抱内存不足的错误,请教大家是什么原因!!!!测试中我打开那个Activity,不关闭,程序一直挂着都没有问题的,Activity中还建有线程更新一些图形界面之类的操作
------解决方案--------------------
你应该又几百k的图片被加载了吧?android设计规范种也有说到不建议讲图片设计的过大,对于背景图片建议使用.9格式化,不知道是否可以帮到你。
------解决方案--------------------
你是使用bitmap么?这个要手动释放资System.gc();只能释放Java部分的,bitmap要调用recycle()释放资源。
------解决方案--------------------
其实有时候真的没必要把很大分辨率的图片按照32位解码来作为背景图啥的,可以根据屏幕大小 压缩解码,另外可以解码成RGB565,这样可以减少很多内存,而基本没影响显示效果。
------解决方案--------------------
引用:
System.gc() 只是对系统提出一个建议,虚拟机在没有耗尽内存的情况下是可能不会调用它的。 毕竟调用一次也是有性能消耗的。


其实调用了gc() 也不是说系统会立刻清理内存的,只是你给它安排了一个任务,啥时候执行就看系统自己的调度了。
但是不建议频繁调用这个gc接口。基本没什么用
------解决方案--------------------
引用:
Quote: 引用:

楼主的 更新图形的 线程 在关闭的时候作了什么处理呢?

是不是每次打开Activity都新开一个线程,就是说 半个小时过去了 你的程序里新开了很多个线程在同时执行。

我的线程其实做的更新ImageView中的图片很少了,线程关闭是的时候肯定就没有再有更新了,还有就是每一次关闭Activity的时候我的线程都是退出了的,所以说同时开了很多线程执行是不存在的,不过后续我会多测试看看,因为我的Activity中还有一个视频播放器在播放视频,我看看是不是这里的影响,没有办法有这个业务逻辑, 我就必须这样去测试,谢谢指点


all right.
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

图片的影响我觉得很小,因为我把100K的图片去掉也是一样的会有这样的情况,一直不停的打开关闭20分钟就会报错,如果测试15分钟左右,暂停测试一会,让程序挂那里跑,那么几分钟后内存会回落,又可以继续这样压力测试10几分钟


有没有可能存在对bitmap的静态(static)类型的引用?

静态类型的引用?没有,我的所有图片资源都没有声明是静态类型的,还有就是XML文件中android:background="@drawable/ipad_xxxx_bg"
这样直接设定控件背景算不算?


这个不算静态引用
  相关解决方案