利用RxJava避免线程导致的内存泄露问题

关于内存泄露的文章有很多,比如https://www.jianshu.com/p/ac00e370f83d#是比较优秀的一篇,这里不再重复。

导致内存泄露的一个常见可能原因是销毁Activity时尚有耗时线程没有结束。之前公司的网络请求操作利用Retrofit+RxJava进行了高度封装,在访问网络时一般是调用静态方法NetWorks.Post......,在销毁Activity时如果仍在访问网络会导致内存泄露。

Android官方RxJava教程的demo中给出了一个解决这种问题的思路。在RxJava中有多个subscribe(...)方法可供选择,其中部分subscribe()方法会返回一个Disposable对象。该官方demo是MVP结构,在Presenter类中有一个CompositeDisposable对象,该对象可以通过add(Disposable d)方法添加返回的Disposable对象,最后在销毁Activity前调用CompositeDisposable的clear()方法即可取消访问。这样基本上可以避免绝大多数因为开启了新线程导致的内存现楼问题。

你可能感兴趣的:(利用RxJava避免线程导致的内存泄露问题)