Rxjava处理内存泄漏问题

Rxjava处理内存泄漏问题

1.新建一个Lifecycle类继承LifecycleObserver,ObservableTransformer

/**
* 内存泄漏处理
* @param <T>
*/
public class MemoryLeakRxLifecycle<T> implements LifecycleObserver,ObservableTransformer<T, T> {

   final CompositeDisposable compositeDisposable=new CompositeDisposable();

   @NotNull
   @Override
   public ObservableSource<T> apply(@NotNull Observable<T> upstream) {
       return upstream.doOnSubscribe(disposable ->compositeDisposable.add(disposable));
  }

   @OnLifecycleEvent(Lifecycle.Event.ON_DESTROY)
   void onDestroy(){
       if(!compositeDisposable.isDisposed())
           compositeDisposable.dispose();
  }

   public static <T> MemoryLeakRxLifecycle<T> bindRxLifecycle(LifecycleOwner lifecycleOwner){
       MemoryLeakRxLifecycle<T> memoryLeakRxLifecycle=new MemoryLeakRxLifecycle<>();
       lifecycleOwner.getLifecycle().addObserver(memoryLeakRxLifecycle);
       return memoryLeakRxLifecycle;

  }
}

2.配合compose()

Observable.create(...)
  .compose(MemoryLeakRxLifecycle.bindRxLifecycle(this))...

 

posted on 2021-11-29 20:50  jeremie_my00  阅读(204)  评论(0)    收藏  举报