1、出现这个问题的原因是由于Bitmap decode 引发的,我们知道,android程序内存一般限制在16M,当然也有24M的,而android程序内存被分为2部分:native和dalvik:dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是native+dalvik不能超过最大限制。
decode bitmap 的时候,尽量配置下Options,例如:inSameSize
Bitmap使用完以后,调用 bitmap.recycle()来释放内存
如果应用是基于图片的应用,尽量采用LazyLoad和DymanicRecycle
用以下命令可以查看程序的内存使用情况:
dumpsys meminfo 程序的包名或者进程id
多数时候,发生OOM 都是在做一些跟图片相关的操作,以下提出一些建议尽量可以减少这种情况的发生:
decode bitmap 的时候,尽量配置下Options,例如:inSameSize
Bitmap使用完以后,调用 bitmap.recycle()来释放内存
如果应用是基于图片的应用,尽量采用LazyLoad和DymanicRecycle
decode bitmap 的时候,将decode代码 try catch 出来,catch oom error,避免程序crash,可以在catch里面做一些释放内存操作
1)、Dalvik内存:
每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不准确,因为 Dalvi