![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
Humble先生
优秀的人会吸引优秀的人
展开
-
反射相关API整理
概述很多主流的IOC框架,像移动端的Retrofit、服务端的Spring等的核心思想都是通过反射去实现的,阅读源码的时候有很多反射相关的API调用,而这些东西在平时开发中很少用到,时间久了就会忘记,写下这篇文章来整理复习一下,顺便做个记录。继承关系Class类获取Class对象class对象包含了这了类的fields、methods、constructors。Example:World worldObj,获取它的class对象的方式:Class.forName(World..原创 2020-11-21 21:09:39 · 253 阅读 · 0 评论 -
print()和println()的区别
简要写demo的时候意外发现print()和printnln()的一些特别的地方,是有关于Java输入输出流的知识,都是些基础知识,但这个偶然的发现加深了一些理解,特别记录一下。fun main(){ GlobalScope.launch { delay(3000L) println("World!") } print("Hello,")// println("Hello,") ..原创 2020-11-21 08:17:41 · 3458 阅读 · 0 评论 -
RxJava网络异步调用绑定UI生命周期
简述因为Android UI组件通常会频繁性的创建销毁,在搭配异步操作时,子线程持有UI组件引用,而子线程通常用来执行耗时操作,当子线程运行期间UI组件被销毁时,UI组件实例会因为被引用而无法被释放内存占用,所以很容易导致内存泄露。之前分析过RxJava和Retrofit结合使用的源码,其中最后调用了compose(ObservableTransFormer)方法,传入lifecycleProvider.bindToLifecycle()实现和Android UI组件生命周期绑定,以解决UI组件内存..原创 2020-11-13 21:22:20 · 301 阅读 · 0 评论 -
Retrofit结合RxJava源码分析
为什么要使用RxJava处理Retrofit网络请求Retrofit的调用过程我们前面文章已经整理过了,对于Android来讲呢,绝大部分的网络请求任务都是需要回调操作进行UI修改的,Retrofit网络请求底层是socket通信,因为网络的不确定性所以是阻塞性的,那么网络请求的工作就要放在子线程里去做,比如下面这行代码:List<User> users = service.groupList(1001).execute().body();我们需要把这块代码放进子线程中去调用,然后调..原创 2020-11-13 21:19:53 · 317 阅读 · 0 评论 -
GsonConverterFactory源码分析
前言前面我们分析了Retrofit的源码,知道了GsonConverterFactory是如何和Retrofit结合起来的。GsonRequestBodyConverter先看请求入参如何转换,即通过handlers[p].apply(requestBuilder, args[p])来解析参数,以ParameterHandler.Body为例:static final class Body<T> extends ParameterHandler<T> { pr..原创 2020-11-13 21:17:39 · 725 阅读 · 0 评论 -
Retrofit源码分析
本文概述Retrofit作为主流的网络框架,采用注解和接口的方式封装请求,使得调用过程变得优雅又简洁,优雅的背后肯定是卓越的设计,所以从源码角度分析一下Retrofit是如何做到的,整理成文。使用回顾public interface GitHubService { @GET("group/{id}/users?sort=desc") Call<List<User>> groupList(@Path("id") int groupId); /*..原创 2020-11-08 21:55:17 · 293 阅读 · 0 评论 -
OkHttp源码分析
本文概述结合使用从源码层面分析OkHttp的原理。使用回顾public static String getByOkHttp(String url) throws IOException { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder() .url(url) .build(); try (Response ...原创 2020-11-05 21:36:12 · 218 阅读 · 0 评论 -
HttpClient源码分析
本文概述透过源码分析HttpClient的原理。使用回顾public static void sendRequestWithHttpClient() { List<NameValuePair> formparams = new ArrayList<NameValuePair>(); formparams.add(new BasicNameValuePair("account", "")); formparams.add(n..原创 2020-11-01 18:19:21 · 1120 阅读 · 0 评论 -
HttpURLConnection源码分析
本文概述从源码角度理解HttpURLConnection是怎么一步步封装底层socket调用的。HttpURLConnection使用回顾我们先来回顾一下它的用法:new Thread(() -> { HttpURLConnection connection = null; BufferedReader reader = null; try{ URL url = new URL("https://www.baidu.com");//新建URL ..原创 2020-11-01 18:17:44 · 714 阅读 · 1 评论 -
socket通信总结
本文概述整理了一下socket的基础用法,以及从源码层面理解HttpURLConnection的底层也是使用的socket机制进行的网络通信,socket的网络通信体现在应用层就是read和write操作。Socket是什么所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序..原创 2020-11-01 18:16:50 · 381 阅读 · 0 评论