0

0

0

修罗

站点介绍

只有了解事实才能获得真正的自由

封装网络请求框架(七)数据仓库、自动释放rxjava

修罗 2023-02-01 564 0条评论 安卓

首页 / 正文

仓库提供请求服务

之前每次请求都要创建服务,可以封装在一个类提供单例对象;

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) {
            
        }
    });

1690259068726.png

评论(0)


最新评论

  • 1

    1

  • 1

    1

  • -1' OR 2+158-158-1=0+0+0+1 or 'TKCTZnRa'='

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • 1

    1

  • @@5Qa2D

    1

  • 1

    1

  • 1

    1

日历

2025年09月

 123456
78910111213
14151617181920
21222324252627
282930    

文章目录

推荐关键字: Linux webpack js 算法 MongoDB laravel JAVA jquery javase redis