返回

轻松搞定Rxjava2生命周期绑定,三步搞定!

Android

在使用Rxjava请求网络时,常常会遇到这样的情况:当订阅后,activity销毁,此时我们的activity就无法被回收,从而引发内存泄漏。针对此类问题,我们可以使用RxLifecycle来管理activity的生命周期,操作步骤非常简单,只需三步即可搞定!

第一步:添加依赖

在项目的build.gradle文件中添加RxLifecycle的依赖:

implementation 'com.trello.rxlifecycle2:rxlifecycle:2.2.2'

第二步:继承RxLifecycle

在需要管理生命周期的Activity或Fragment中,继承RxLifecycle:

public class MainActivity extends AppCompatActivity implements LifecycleProvider<ActivityEvent> {

    private final BehaviorSubject<ActivityEvent> lifecycleSubject = BehaviorSubject.create();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 将生命周期事件发布到lifecycleSubject中
        lifecycleSubject.onNext(ActivityEvent.CREATE);
    }

    @Override
    protected void onStart() {
        super.onStart();
        lifecycleSubject.onNext(ActivityEvent.START);
    }

    @Override
    protected void onResume() {
        super.onResume();
        lifecycleSubject.onNext(ActivityEvent.RESUME);
    }

    @Override
    protected void onPause() {
        super.onPause();
        lifecycleSubject.onNext(ActivityEvent.PAUSE);
    }

    @Override
    protected void onStop() {
        super.onStop();
        lifecycleSubject.onNext(ActivityEvent.STOP);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        lifecycleSubject.onNext(ActivityEvent.DESTROY);
    }

    @Override
    public Observable<ActivityEvent> lifecycle() {
        return lifecycleSubject.hide();
    }
}

第三步:绑定生命周期

在需要管理生命周期的网络请求中,使用RxLifecycle进行绑定:

Observable<String> observable = Observable.just("Hello, world!");

observable
        .compose(bindUntilEvent(ActivityEvent.DESTROY))
        .subscribe(System.out::println);

这样,当Activity销毁时,网络请求就会自动取消,从而避免内存泄漏。

总结

RxLifecycle是一个非常实用的库,它可以帮助我们轻松管理Rxjava2的生命周期,避免内存泄漏。它的使用非常简单,只需要三步即可搞定!