Android内存泄露造成的OOM问题

最近做了一个项目,算是一个单机项目吧,不需要从网络获取任何数据,所有的图片和文字均来自本地和数据库。因为应用牵扯到了大量的图片,在开发过程中,遇到了内存溢出问题,于是各方面查找资料,终于在DDM插件帮助下确认了是内存泄露造成的(数据对象内存大小直线上升,没有稳定在一个范围)。由于没有这方面的经验,项目一下子就卡了一个星期,每天早上醒来,想起这个问题,一天的好心情都没有了。各种查找内存泄露的方法都尝试了,基本没什么作用,那几天心情很沉重,觉得自己的编程生涯要结束了(公司的大神离职了,基本是自己独挑的项目)。每天都在不停的搜索OOM问题,看到了软引用bitamp,以前也听说过,可是没用过,于是就试着使用了软引用获取bitmap,发现有一点点作用,可以在一部2.3版本的测试机上运行到结束,但是内存泄露却依旧存在,在魅族2和小米2s上则会在结束之前崩溃。于是继续寻找方法,第二个转折点就是使用了:LruCache.内存缓存图片,开辟出一块内存空间用于缓存图片。使用了lrucache处理图片后,内存泄露情况还是存在,但在小米2s上却不会崩溃了,分析了一下:应用在内存完全使用完之前已经结束了,由此也证明了:内存泄露可能造成OOM,而不是一定能造成OOM.虽然在一定程度上遏制了应用的崩溃频度,可是内存泄露现象却始终存在。今天,偶然发现每次进入首页,都是“”new了一个新的,而不是使用的栈中的已存在的首页,于是突发奇想,可不可以在应用运行过程中只创建一个首页(本应用首页有四十多张图片),当从其它界面返回到首页时,都是使用的栈中已有的首页,而不是每次都加载新的首页(即重回首页时走的生命周期是onResume(),而不是onCreate()---onResume()),于是搜了一些资料,还真有这样的方法,即:Activity的四种加载方式:<activity android:name=".MainActivity" android:launchMode="standard" /> ,其中launchMode可取值有四个,"singleTask"就是决定一个activity在栈中只存在一个,当需要这个activity时,就从栈中取出,而不是重新onCreate()一个,到此,内存泄露问题解决。

下面是一些提供帮助的文章地址。

通过软引用缓存bitmap:点击打开链接

通过LruCache缓存图片并读取:点击打开链接

activity的四种加载方式:点击打开链接


  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值