android开发 - OOM (Out Of Memory)



1.设计上android不存在swap分区
  唯一能腾出内存的方式就是释放应用


2.android同时限制了每个应用可以使用的内存大小
  1.诸多资源最显著的内存大户就是图片
  2.不同的屏幕大小使得图片也可能使用不同的大小
  3.孤儿不同的屏幕大小系统默认的应用内存限制不同
  4.当内存使用超出此限制,就会触发OOM










OOM和ANR是android开发中最常见的bug


ANR   Application Not Response   应用无响应


OOM   Out of Memory              内存溢出 














SWAP分区 
也称为交换区


  在系统的物理内存不够用的时候,把磁盘空间中的一部分空间释放出来,以供当前运行的程序使用。
  那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到swap分区中,等到那些程序要运行时,再从swap分区中恢复保存的数据到内存中


并不是所有物理内存中交换出来的都会被放到swap中(如果这样的话,swap就会不堪重负),有相当一部分数据被直接交换到文件系统。例如,有程序打开一些文件,对文件进行读写(其实每个程序都至少要打开一个文件,那就是运行程序本身),当需要这些程序的内存空间交换出去的时,就没有必要将文件部分的数据放到swap空间中了,而可以直接将其放到文件里去。如果是读文件操作,那么内存数据被直接释放,不需要交换出来,因为下次需要时,可直接从文件系统恢复,如果是写文件,只需要将变化的数据保存到文件中,以便恢复。但是那些用malloc和new函数生成的对象的数据则不通,他们需要swap空间,因为他们在文件系统中就没有相应的储备文件,因此被称作匿名内存数据。这类数据还包括堆栈中的一些状态和变量数据等。所以说,swap空间是匿名数据的交换空间。




















我们一般开发的应用都是普通应用


一个普通的应用程序,一般系统给分配200M空间






一般一个应用在系统中占用一个进程


OOM特指在heap中的内存达到上线的时候


androi中虚拟机层以上的内存消耗




正确管理内存,避免OOM
1.能够监视内存使用情况DDMS
2.避免内存泄露
3.内存优化
4.正确的对图片处理




如果我们在清单中的Application标签中添加
 android:largeHeap="true"  表示在比本身要多一些对内存空间








所以我们使用数据,尽量要释放




































避免内存泄露


引用与GC的关系
1.一个对象如果长时间不用,就会被GC回收了


Androi应用进程策略
   一旦启动,进程会持续


在我们使用activity开发时,退出了activity,但是进程没有消失,也就是我们在退出时,onPause(),onStop()里一定要销毁所申请的内存


千万不要在activity中声明static成员变量,


Context,Activity与内存泄露
  很多类都需要Context这个参数
  这些类可能是长时间驻留内存的
  Activity应该在执行onDestroy()后能够被回收


Context与Application
  不会有内存泄露意识
  






当前我们需要使用Context的时候,尽量使用getApplicationContext(),因为这个会防止内存泄露
static的变量尽量少用
 


getApplicationContext()
是当前进程的上下文对象,只要当前应用程序在,那么该实例就是一直存在的,并且它只有开销一次内存空间


推荐使用这个当当前上下文
我们新建一个自定以的application类,可以使用application来传参数,
并且必须克隆一份,否则当前的activity对象就不会被销毁,
并且我们需要在清单中的application标签中加入,android:name="com.enen.aa.MyApplication"






































Handler与Activity
   Message还未被响应时,handler就还在被引用
   当handler作为Activity的内部成员时




当我们在一个activity中,使用Handler,最好给它声明为static,这样可以避免内存泄露,因为当其它类引用这个handler实例时,并不会影响这个activity的回收

























































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值