Android OOM的那些事

2014-11-24 13:12:29 · 作者: · 浏览: 2

Context部分


View的构造函数


View.java


View 保存了对context的引用,mContext = context;


1.我们知道结构其实和DOM差不多,都会保存其父容器、子容器的引用,因而context的使用需要注意,不要使用静态的子View


2.来看View中的setBackgroundDrawable方法


View.java



我们注意到d.setCallback(this);


Drawable保存了View的引用,处理了一些回调。因此,Drawable对象使用时需要注意了。不要作为静态对象使用。



Resource.getDrewable()方法是比较好的,Resource内部使用了一个Drawable.ConstantState的弱引用缓存,提高了效率。


来看代码:


Resource.java



使用Drawable一般情况下效率较高,且不易发生内存泄露。



接下来我们来看下BitMap的使用



BitMapFactory.java



我们每次调用BitMapFactory中的生产bitmap的方法的时候都会new一个bitmap出来,为了避免内存溢出,我们有两种主要的思路:


1. 使用缓存,避免重复new同一个图片


2. 销毁bitmap,使用完之后立刻销毁bitmap


缓存需要自己实现,如果是销毁的话,可以使用Bitmap中的recycle()方法。