0

0

0

修罗

站点介绍

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

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

修罗 2023-02-01 792 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)


最新评论

  • https://www.studyglobus.com/author/carroll34a5552/

    Ценники на вывоз мусора сейчас космос, любые лайфхаки по экономии в тему.

  • Richardgrold

    1xbet onlayn kazino platforması ilə vaxtınızı daha səmərəli və maraqlı keçirin. Saytın canlı kazino bölməsi istifadəçilərə fərqli bir dünya təklif edir. Burada canlı dilerli kazino oyunlarının hər bir növünü sınaqdan keçirə bilərsiniz. Krupyelərin peşəkarlığı oyunun dinamikasını və marağını artırır. Müntəzəm olaraq yenilənən oyun siyahısı cansıxıcılığa yol vermir. Hesabınızı artırmaq üçün onlarla fərqli və etibarlı üsul mövcuddur. Qazanılan pullar cəmi bir neçə dəqiqə ərzində şəxsi hesabınıza köçürülür. Aktiv fəaliyyətinizə görə fərdi bonuslar və hədiyyələr qazana bilərsiniz. Dəstək xidməti həm çat, həm də e-poçt vasitəsilə kömək göstərir. 1xbet ailəsinə qoşulun və böyük uduşlar üçün ilk addımı atın. onlayn kazino

  • 砂岩白丘

    我一直梦想, 看到你们相册那样的地方。真棒。

  • 城市地標

    我喜欢, 这里分享真实经验。你的项目 就是 属于这里的。请继续。

  • 宗教地標

    我热爱这样的想法, 去那么多国家。真的很鼓舞。

  • 觀景高地

    能感受到热爱。继续保持 感受。

  • 最佳季節

    我关注这样的资源, 写得很实在。你的网站 就是 属于这里的。加油。

  • 1

    1

  • 1

    1

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

    1

日历

2026年07月

   1234
567891011
12131415161718
19202122232425
262728293031 

文章目录

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