aop方式向okhttp完成网络的监听拦截_推荐一个基于 okhttp 的网络性能优化库

本文作者

作者:dehang0

链接:

https://juejin.cn/post/6908178914779561997

本文由作者授权发布。

本来以为这是一个 okhttp 的封装库,详细看了下,才了解是一个基于 okhttp 的,提升网络连接性能的框架。

我这边把作者两篇文章合并成了一篇,前部分说明用法,后部分将一些核心原理。

1 简介

OkOne是一款基于okhttp库的网络性能优化框架,但不同于其他框架对okhttp的使用调用进行封装,而是从不一样的方面,以对开发者无侵入的方式进行优化。

痛点

在APP项目中可能会包含多个组件模块,或依赖多个三方库,甚至部门分不同团队开发各自业务模块AAR供APP集成。其中可能都有使用到okhttp框架进行网络请求,不同的组件模块和三方库中各自创建OkHttpClient实例,或有开发者未通过单例缓存OkHttpClient,而是每次请求每次新建。这样将造成极大浪费,并且导致不能充分利用okhttp的请求队列和连接池等控制和优化措施。

解决

借助该OkOne库可以无侵入地将分散在不同组件中的OkHttpClient进行收敛,由OkOne进行统一管理和复用。OkOne会比较OkHttpClient.Builder进行区分复用,即相同配置的OkHttpClient.Builder将自动复用同一个OkHttpClient实例。

2 集成

集成很简单,仅需三步:

Minimum supported Gradle version is 6.5

1.在项目根目录的build.gradle里添加依赖
dependencies {
    

    classpath 'com.cdh.okone:gradle:0.1.0'
}
2.在app module的build.gradle里应用插件
apply plugin: 'plugin.cdh.okone'
3.在app module的build.gradle的dependencies里添加依赖
implementation 'com.cdh.okone:okone:0.1.2'

至此已完成接入,运行即会自动生效。

3 效果

现在来看看实际效果,在demo中创建三个不同配置的OkHttpClient.Builder:

// builder1

OkHttpClient.Builder builder1 = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .addInterceptor(new HttpLoggingInterceptor())
    .eventListener(mEventListener);

// builder2
OkHttpClient.Builder builder2 = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .minWebSocketMessageToCompress(2048)
    .eventListener(mEventListener);
    testRequestServer(builder2);

// builder3
OkHttpClient.Builder builder3 = new OkHttpClient.Builder()
    .connectTimeout(10, TimeUnit.SECONDS)
    .addInterceptor(new HttpLoggingInterceptor())
    .retryOnConnectionFailure(true)
    .minWebSocketMessageToCompress(2048)
    .eventListener(mEventListener);
实例复用

接下来分别用这三个Builder构建OkHttpClient进行请求:

private void testRequestServer(OkHttpClient.Builder builder) {
    
    // 这里不缓存client,每次都build
    OkHttpClient client = builder.build();
    // 打印日志
    Log.d(TAG, "创建OkHttpClient: " + client);

    Request request = new Request.Builder()
            .url(api)
            .build();
    Call call = client.newCall(request);
    call.enqueue(new Callback() {
        @Override
        public void onFailure(@NotNull Call call, @NotNull IOException e) {}

        @Override
        public void onResponse(@NotNull Call call, @NotNull Response response) throws IOException {}
    });
}<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值