在MVP当中,过多的类导致了内存控制十分困难,而强引用又很容易导致OOM(GC时不会回收被强引用持有的对象),在这个时候就轮到其他的两中对象引用的方式:软引用与弱引用登场了(虚引用几乎不会被用到)
介绍
软引用
在系统内存不够时,会回收被软引用持有的对象,引用方法如下
1
2
3 //T可代表任何对象
SoftReference<T> reference = new SoftReference<T>(t0);
T t1 = reference.get();
这里表示t1持有t0的弱引用
弱引用
每次系统运行垃圾清理(GC)时都会回收被弱引用持有的对象,引用方法如下,和软引用类似
1
2 WeakReference<T> reference = new WeakReference<T>(t0);
T t1 = reference.get();
在MVP模式中,Presenter可能会需要引用Activity的引用,在这里我们就可以使用这两种方式来防止内存泄漏了,如在View层的接口定义了一个getACtivity()函数,则在Activity中实现的时候可以这么写
1 | @Override |
我们也可以用一个ArrayList来控制weakReference,这样可以避免频繁地new WeakReference,具体代码如下
1 | private List<WeakReference<Activity>> mWeakReferenceList = new ArrayList<WeakReference<Activity>>(); |
1 | @Override |
####运行时可看到打印日志