RxJava:自动退订 Android MVP
RxJava: auto unsubscribe in Android MVP
我在 Android 具有 MVP 模式的应用程序中使用 RxJava
/Retrofit
。
现在我想在 Activity/Fragment
销毁时清理 xxxPresenter
以防止 oom
。
Presenter简单代码:
public class LoginPresenter {
private LoginView mLoginView;
private LoginMode mLoginMode;
private Subscriber mLoginSubscriber;
public LoginPresenter(LoginView loginView) {
this.mLoginView = loginView;
mLoginMode = new LoginMode();
}
void login(String userName, String pwd) {
mLoginSubscriber = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
if (mLoginView != null) {
mLoginView.onLoginSuccess();
}
}
};
mLoginMode.login(userName, pwd, mLoginSubscriber);
}
void destory() {
mLoginView = null;
mLoginSubscriber.unsubscribe();
}
}
当 Activity/Fragment destory 将调用演示者的 destory() 方法时
我的问题是:
如果presenter有更多的网络请求,我会持有很多订阅者成员,有什么办法让订阅者在Activity/Fragment
销毁时自动退订?
我想你需要的是CompositeSubscription
。它是一个订阅容器,允许您一次取消订阅。
public class LoginPresenter {
private LoginView mLoginView;
private LoginMode mLoginMode;
private CompositeSubscription mSubscriptions;
public LoginPresenter(LoginView loginView) {
this.mLoginView = loginView;
mLoginMode = new LoginMode();
mSubscriptions = new CompositeSubscription();
}
void login(String userName, String pwd) {
Subscription loginSubscriber = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
if (mLoginView != null) {
mLoginView.onLoginSuccess();
}
}
};
mLoginMode.login(userName, pwd, loginSubscriber);
mSubscriptions.add(loginSubscriber);
}
void destory() {
mLoginView = null;
mSubscriptions.unsubscribe();
}
}
我在 Android 具有 MVP 模式的应用程序中使用 RxJava
/Retrofit
。
现在我想在 Activity/Fragment
销毁时清理 xxxPresenter
以防止 oom
。
Presenter简单代码:
public class LoginPresenter {
private LoginView mLoginView;
private LoginMode mLoginMode;
private Subscriber mLoginSubscriber;
public LoginPresenter(LoginView loginView) {
this.mLoginView = loginView;
mLoginMode = new LoginMode();
}
void login(String userName, String pwd) {
mLoginSubscriber = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
if (mLoginView != null) {
mLoginView.onLoginSuccess();
}
}
};
mLoginMode.login(userName, pwd, mLoginSubscriber);
}
void destory() {
mLoginView = null;
mLoginSubscriber.unsubscribe();
}
}
当 Activity/Fragment destory 将调用演示者的 destory() 方法时
我的问题是:
如果presenter有更多的网络请求,我会持有很多订阅者成员,有什么办法让订阅者在Activity/Fragment
销毁时自动退订?
我想你需要的是CompositeSubscription
。它是一个订阅容器,允许您一次取消订阅。
public class LoginPresenter {
private LoginView mLoginView;
private LoginMode mLoginMode;
private CompositeSubscription mSubscriptions;
public LoginPresenter(LoginView loginView) {
this.mLoginView = loginView;
mLoginMode = new LoginMode();
mSubscriptions = new CompositeSubscription();
}
void login(String userName, String pwd) {
Subscription loginSubscriber = new Subscriber() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object o) {
if (mLoginView != null) {
mLoginView.onLoginSuccess();
}
}
};
mLoginMode.login(userName, pwd, loginSubscriber);
mSubscriptions.add(loginSubscriber);
}
void destory() {
mLoginView = null;
mSubscriptions.unsubscribe();
}
}