仓库提供请求服务
之前每次请求都要创建服务,可以封装在一个类提供单例对象;
OkHttpClient okHttpClient = NetworkModule.provideOkHttpClient();
Retrofit retrofit = NetworkModule.provideRetrofit(okHttpClient);
DefaultService service = retrofit.create(DefaultService.class)
service.sheets(null, 10)
// 网络执行在子线程
.subscribeOn(Schedulers.io())
// 请求完成,观察者在主线程执行(onSubscribe,onNext,onError,onComplete)
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new HttpObserver<SheetWrapper<Sheet>>(getHostActivity(),true) {
@Override
public void onSucceeded(SheetWrapper<Sheet> data) {
Log.d(TAG, "onSucceeded: "+data.getData().getData().get(1));
//hideLoading();
}
});
DefaultRepository仓库
public class DefaultRepository {
private static DefaultRepository instance;
private final DefaultService service;
public DefaultRepository() {
// 虽然当前类是单例设计模式,但因为直接调用provideRetrofit这样的方法
service = NetworkModule.provideRetrofit(NetworkModule.provideOkHttpClient()).create(DefaultService.class);
}
/**
* 返回当前对象的唯一实例
* <p>
* 单例设计模式
* 由于移动端很少有高并发
* 所以这个就是简单判断
*
* @return
*/
public synchronized static DefaultRepository getInstance() {
if (instance == null) {
instance = new DefaultRepository();
}
return instance;
}
/**
* 广告列表
*
* @return
*/
public Observable<ListResponse<Ad>> ads(int position) {
return service.ads(position)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
}
/**
* 首页banner界面广告
*
* @return
*/
public Observable<ListResponse<Ad>> bannerAd() {
return ads(Constant.VALUE0);
}
}
自动释放rxjava
由于系统资源分配问题,页面在后台被强制销毁,如果不释放在页面请求相关的资源,就容易造成内存泄漏
添加依赖
//自动释放RxJava相关资源
//https://github.com/uber/AutoDispose
implementation "com.uber.autodispose2:autodispose-androidx-lifecycle:2.1.1"
使用
activity:
Observable<ListResponse<Ad>> ads = DefaultRepository.getInstance().bannerAd();
ads.
// 自动释放RxJava相关资源
to(autoDisposable(AndroidLifecycleScopeProvider.from(this)))
.subscribe(new HttpObserver<ListResponse<Ad>>() {
@Override
public void onSucceeded(ListResponse<Ad> data) {
}
});
1
1
1
1
1
1
1
1
1
1