首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

Android常用库源码解析

DiskCache图片磁盘缓存,默认使用LruDiskCache算法,在缓存满删除最近最少使用图片 glide源码 一般看源码先看他使用方法,通过使用方法看对应代码。...而一个太大缓存空间,则有可能还是会引起 java.lang.OutOfMemory 异常。一般使用最大可用内存1/8作为缓存大小。...OkHttp 处理了很多网络问题:自动重连、会很多常用连接问题中自动恢复。如果您服务器配置了多个IP地址,当第一个IP连接失败时候,OkHttp会自动尝试下一个IP。...Retrofit原理 Retrofit 2.0底层依赖OkHttp实现,也就是说Retrofit本质上就是对OkHttp更进一步封装,还支持Rxjava。...Retrofit和其它Http库最大区别在于通过大范围使用注解简化Http请求(请求方式、请求参数)。 网络请求工作本质上是OkHttp完成,而 Retrofit 仅负责网络请求接口封装。

1.1K10

Android开发笔记:Retrofit + OkHttp3 + coroutines + LiveData打造一款网络请求框架

xml、json、text等等 总的来说就是易使用、易扩展、可读性高 一、目的 背景 市场上现在存在网络请求不在少数,原生HttpClient 到 OkHttp、Volley、xUtils 无疑都是将网络请求简单化...后面出现Retrofit ,将OkHttp3 进行了封装,将请求API 接口化,将返回数据结合GSON等各种转换器转换为直接面向开发对象,大大提升了我们开发效率,为了解决Android UI/子线程...负责功能场景方便切换,大家开始结合了RxJava, 这一操作直接将Retrofit + OkHttp3 + RxJava 组合网络框架推上了热门写法, 现状 kotlin 出现是Google 对于...= Resource(Status.LOADING, data, null) } } 2.3 使用Retrofit 创建API 接口、接口帮助类 将接口管理和请求放在不同类文件中,方便管理 API...Databing 等组件、更加优雅开发,对于数据处理ViewMdoel 好处真的太多了,可以多了解一下, Demo 下载 最后我在这里分享一下这段时间朋友,大佬那里收集到一些2019-2020BAT

2.2K30

Android面试刨根问底之常用源码篇(二):OkHttp, Retrofit,自定义View源码分析总结

Okhttp高效体现在,okhttp内有个Dispatcher类,是okhttp内部维护一个线程池,对最大连接数,host最大访问量做了初始定义。...发起真正网络请求,解析返回数据 http写入网络IO流,网络IO流中读取返回给客户端数据。...App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数,之后由OkHttp完成后续请求操作。...在服务端返回数据之后,OkHttp将原始结果交给RetrofitRetrofit根据用户需求对结果进行解析。...使用Retrofit七步骤 添加Retrofit依赖,网络权限 定义接收服务器返回数据Bean 创建网络请求接口,使用注解(动态代理,核心) builder模式创建Retrofit实例,converter

1.2K00

由浅入深,聊聊OkHttp那些事

尽管对于大多数开发者而言,通常情况下使用是往往它封装版本 Retrofit ,不过其底层依然离不开 Okhttp 作为基础支撑。...支持HTTP/2, 并且允许对同一个主机所有请求共享一个套接字(HTTP/2); 简化ApiApi设计简单明了,易于使用,可以轻松发起请求获取响应,并处理异常。...特别的,如果我们服务器或者域名有 多个IP地址 ,OkHttp 将在 第一次 连接失败尝试替代原有的地址(对于 IPv4+IPv6 和托管在冗余数据中心服务是必需)。...图片 上述逻辑,我们分为四段进行分析: 请求如果遇到异常,则根据情况去尝试恢复,如果不能恢复,则抛出异常,跳过本次请求;如果请求成功,则在 finally 里释放资源; 如果请求是重试之后请求,那么将重试前请求响应体设置为...在具体寻找连接过程中,一共进行了下面5次尝试尝试重连 RealCall 中 connection,此时不需要重新获取连接; 尝试连接池中获取一个连接,不带路由与多路复用; 再次尝试连接池中获取一个连接

1.2K40

由浅入深,聊聊OkHttp那些事(很长,很细节)

尽管对于大多数开发者而言,通常情况下使用是往往它封装版本 Retrofit ,不过其底层依然离不开 Okhttp 作为基础支撑。...支持HTTP/2, 并且允许对同一个主机所有请求共享一个套接字(HTTP/2); 简化ApiApi设计简单明了,易于使用,可以轻松发起请求获取响应,并处理异常。...特别的,如果我们服务器或者域名有 多个IP地址 ,OkHttp 将在 第一次 连接失败尝试替代原有的地址(对于 IPv4+IPv6 和托管在冗余数据中心服务是必需)。...上述逻辑,我们分为四段进行分析: 请求如果遇到异常,则根据情况去尝试恢复,如果不能恢复,则抛出异常,跳过本次请求;如果请求成功,则在 finally 里释放资源; 如果请求是重试之后请求,那么将重试前请求响应体设置为...在具体寻找连接过程中,一共进行了下面5次尝试尝试重连 RealCall 中 connection,此时不需要重新获取连接; 尝试连接池中获取一个连接,不带路由与多路复用; 再次尝试连接池中获取一个连接

1.1K30

Okhttp拦截器Interceptor学习和使用

Android网络之Retrofit2.0使用和解析 Retrofit2.0中注解使用套路 Retrofit2.0+Okhttp不依赖服务端数据缓存 需求是推动任何事物向前发展动力,这次我们项目需要对网络接口进行加密了...或者像 Retrofit2.0+Okhttp不依赖服务端数据缓存 这篇文章中不依赖服务端缓存,在请求过程中我们自己修改一些请求 request 和 response 。...这个时候拦截器就是我们强大助力。 okhttp拦截器 我们 okhttp 处理一条普通url请求代码执行过程中观察 interceptors 工作。...而接下来 CallServerInterceptor 拦截器功能使用 HttpStream 与服务器进行数据读写操作。...MediaType mediaType = responseBody.contentType(); //获取相应体重数据流,只能获取一次,在获取之后数据流会关闭,再次获取会有异常抛出 byte[]

3.9K40

Android网络访问库 - Retrofit学习(1)基础

在实际开发中,我们Retrofit配合OKHTTP使用。我们使用OKHTTP当做传输层,使用RetrofitOKHTTP之上,使用Java接口描述我们HTTP协议。...简单说: 使用Retrofit转换HTTP API协议成一个javaInterface服务,我们直接使用java类会方便好多。...// https://your.api.url/v2/me 动态url 有时候我们会以一些其他方式获得一个url,比如从数据库或者网络读取到一个url,这样url就不能像上面那样 通过 baseUrl...而在 2.x ,不再区分同步和异步调用,都被包裹在 一个泛型Call类中。 下面我们 “接口定义” 和 “调用” 来对比他们不同。...你可以添加一个或者多个ConverterFactory,顺序很重要,Retrofit将会按顺序使用它,如果失败,就尝试使用下一个转换器。

96700

一起来写OKHttp拦截器

00:00 一开始就不多说废话了,主要因为工作遇到了一些使用 OKHttp 拦截器问题,所以在此特写这篇以作记录。...然而 Retrofit 内部请求也是基于 OKHttp ,所以在做一些自定义修改 HTTP 请求,需要对 OKHttp 拦截器具有一定了解。...还是后台需求,login 接口返回数据也是经过 AES 加密。所以需要我们针对所有响应体都做解密处理。 另外,还有很重要一点,就是数据正常和异常返回 JSON 格式不一致。...因为 data 中正常数据中是 JSON ,而另一个异常数据中是字符串。 那么,如何解决上述两个问题呢? 利用 自定义 ConverterFactory !!...重要说三遍!!! 再说最后一遍,再见!!! 00:03 References 如何使用Retrofit请求非Restful API

73920

Android OkHttp + Retrofit 取消请求方法

本文链接 前言 在某一个界面,用户发起了一个网络请求,因为某种原因用户在网络请求完成前离开了当前界面,比较好做法是取消这个网络请求。对于OkHttp来说,具体是调用Callcancel方法。...第一步,在建立请求,给请求(request)添加标记;第二步,根据标记,找到请求;最后,取消这个请求。 OkHttptag 要取消一个请求,OkHttp中可以使用cancel方法,参考。...OkHttprequest对象有tag。可以根据tag来标示请求。参考Stack Overflow。...2018年Retrofit仍未提供直接访问call对象方法 那么如何找到目标网络请求呢?...+ Retrofit 使用示例 Android OkHttp + Retrofit 取消请求方法 Android OkHttp + Retrofit 下载文件与进度监听 Android OkHttp

3.7K20

「2020 新手必备 」极速入门 Retrofit + OkHttp 网络框架到实战,这一篇就够了!

它通过基于 REST web 服务检索和上传 JSON (或其他结构化数据)变得相对容易。在使用中,您可以配置用于数据序列化转换器。...对于 JSON ,通常使用Gson ,但是可以添加自定义转换器来处理 XML 或其他协议。Retrofit 对 HTTP 请求使用 OkHttp 库。...在 app module 下 build.gradle 中添加以下依赖: // OkHttp3 api 'com.squareup.okhttp3:okhttp:3.10.0' api 'com.squareup.okio...:okio:1.8.0' // Retrofit api 'com.squareup.retrofit2:retrofit:2.7.0' // Gson 服务器数据交互 api 'com.google.code.gson...但细心观察发现,第一步 Retrofit 实例化过程,只要服务器不换代码几乎是不变,所以我们完全可以将它封装 而且大家有没有发现,如果单单使用 OkHttp 我们返回值是一个 Response

1.1K30

今日头条面试

(3)方法执行 使用Dispatcher进行方法分派,异步则使用线程池来处理,同步就直接执行,而UI线程则使用MainLooper创建一个Handler,投递到主线程中去执行。...,然后通过retrofit创建一个api然后调用,就可以自动完成一个OkhttpCall创建。...Retrofit作用 Retrofit实际上是为了更方便使用Okhttp,因为Okhttp使用就是构建一个Call,而构建Call大部分过程都是相似的,而Retrofit正是利用了代理机制带我们动态创建...Okhttp使用分发器Dispatcher来维护一个正在运行任务队列和一个等待队列。如果当前并发任务数量小于64,就放入执行队列中并且放入线程池中执行。...Okhttp底层是采用Socket建立流连接,而连接如果不手动close掉,就会造成内存泄漏,那我们使用Okhttp也没有做close操作,其实是Okhttp自己来进行连接池维护

93710

架构角度看Retrofit作用、原理和启示

网络请求目标虽然是数据,但是我们需要为这个数据写大量配套代码,发起请求对象Call,接收数据对象CallBack,做数据转换对象Converter,以及检查和处理异常对象等。...而Retrofit事情,就是为开发者节省这部分工作量,Retrofit一方面底层统一用OkHttp去做网络处理;另一方面在外层灵活提供能直接融入业务逻辑Call网络访问对象。...代码可以看出,实现数据转换核心对象其实是responseConverter,这个Converter实际上要依次经过Retrofit建造和ServiceMethod建造后,才能确定下来。...Retrofit建造添加数据转换工厂Retrofit里有converterFactries列表,这是在我们初始化Retrofit实例添加 //retrofit对象 Retrofit retrofit...Retrofit会在自己转换器工厂列表中遍历每个ConverterFactory,尝试根据ServiceMethod所对应目标数据类型,找到Converter数据转换类 ?

2K100

【转-干货】Retrofit2.0使用总结及注意事项

,其将请求返回javaBean,对网络认证 REST API进行了很好对支持此,使用Retrofit将会极大提高我们应用网络体验。...更多关于REST介绍:什么是REST - GitHub讲解非常详细 2.0与1.9使用比较 如果之前使用Retrofit1,会发现2.0后API会有一些变化, 比如创建方式,拦截器,错误处理,转换器等...Retrofit1体验不好地方: Retrofit1不能同时操作response返回数据(比如说返回 Header 部分或者 URL)和序列化后数据(JAVABEAN)。...参考: Retrofit2.0+okhttp3缓存机制以及遇到问题 How Retrofit with OKHttp use cache data when offline 使用RetrofitOkhttp...,在ConverterFactory中进行处理, 可参照: Retrofit+RxJava实战日志(3)-网络异常处理 retrofit-2-simple-error-handling 网络状态监听 一般在没有网络时候使用缓存数据

5.3K30

笔记--解决Android使用retrofit2 OkHttp3短时间内大量通讯提示Socket Failed:EMFILE

前言 Androidd在做Http请求,使用Retrofit2是一个比较方便事,这个我一直也用了蛮久了,只不过最近在项目中突然遇到了问题,也是通过分析测试后解决,顺便做一下笔记。...事件回顾 报错图片 当时程序上是做盘点业务流程,点击盘点按钮时会同时有35个Http请求,实际操作是不停地地点击盘点,多次后出现这个情况,具体定位分析里这个操作除了Http请求返回数据后UI...显示,基本没啥别的业务逻辑操作,所以问题也比较好定位,应该是同一间多次请求Http造成原因。...,都正常使用,一直使用Retrofit2+OkHttp3进行网络请求,所以没再深入研究,既然出现问题了,那就研究下有没有相关遇到这个问题,网上搜了下资料: OkHttpGithub源码是可以看到...那我们就从OkHttp中来看看分析下,上面代码中使用genericClient创建OkHttp,用到了new OkHttpClient.Builder(),那我们就分析下这里怎么处理,OkHttpClient

84510

OkHttp 3.x 源码解析(一)之Interceptor 拦截器

阅读过很多写过Okhttp原理文章,笔者看完觉得还是很失望,因此大白君打算写一个okhttp系列,接下来下半年还会写一个对RxJava2系列,看过我去年写Retrofit和Java系列,都知道我是用心去写...,并不是凭空去翻译API, 大都是自己亲自使用过后总结出经验,再来一步步构思去写,好博客,笔者认为首先要构思清晰,由浅入深,再总结回顾,最后恍然大悟!...这个方法是所有HTTP工作发生地方,以满足请求和响应需求。 拦截器可以有多个,假设同时拥有一个压缩拦截器和一个校验拦截器:需要确定数据是否已压缩,然后对数据进行校验,或者校验和压缩两者一起使用。...注意 OkHttp拦截器需要OkHttp 2.2或以上版本使用。...值得注意是,拦截器不支持OkUrlFactory,或者依赖Okhttp其他库,包括Retrofit≤1.8和 Picasso≤2.4。

1.5K20

源码分析Retrofit请求流程

API_URL = "https://api.github.com"; //定义接口返回数据实体类 public static class Contributor { public...,知道 retrofit 使用流程 定义 API 构造接口数据实体类 构造 retrofit 对象,指定 baseUrl和数据转换器(即接口数据解析器,如对 json、 xml、 protobuf等数据类型解析...) 通过 retrofit 将程序猿定义 API 接口变成"实现类" 执行“实现类”方法 执行网络请求,获取接口请求数据 这个流程关键点是4、5、6,下文将详细对这几个步骤源码进行阅读。...网络请求封装,这里也可以看出 retrofit内部是使用okhttp来执行网络请求 CallAdapter public interface CallAdapter { //.....使用 synchronized进行同步操作 进行异常处理 调用 createRawCall 创建 okhttp3.Call 对象 执行 okhttp Call.execute方法,并解析 response

37420

放弃Spring Boot 中 RestTemplate,我选择 Retrofit

实际上,square公司还开源了基于okhttp进一步封装retrofit工具,用来支持通过接口方式发起http请求。...如果你项目中还在直接使用RestTemplate或者okhttp,或者基于它们封装HttpUtils,那么你可以尝试使用Retrofit。.../**路径下(排除/api/test/savePerson)请求,拦截处理器使用TimeStampInterceptor。...Http异常信息格式化器 当出现http请求异常,原始异常信息可能阅读起来并不友好,因此retrofit-spring-boot-starter提供了Http异常信息格式化器,用来美化输出http...数据转码器 Converter Retrofi使用Converter将@Body注解标注对象转换成请求体,将响应体数据转换成一个Java对象,可以选用以下几种Converter: Gson: com.squareup.Retrofit

2.8K11
领券