xuy*_*jun 1 mvp android rx-java
我使用RxJava/ Retrofit在Android应用程序与MVP模式.
现在我想清理xxxPresenter什么时候Activity/Fragment为了防止破坏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();
}
}
Run Code Online (Sandbox Code Playgroud)
当Activity/Fragment destory将调用presenter的destory()方法时
我的问题是:
如果主持人有更多的网络请求,我将拥有很多用户成员,有什么办法让用户在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();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1405 次 |
| 最近记录: |