开源框架源码解析
文章平均质量分 75
androidsj
这个作者很懒,什么都没留下…
展开
-
Butterknife - 使用和源码解析(更新中......)
一 butterknife的引言和基本使用第一步:compile 'com.jakewharton:butterknife:8.5.1'第二步:初始化布局之后调用ButterKnife.bind(this);第三步:@BindView(R.id.content_tv) TextView contentTv;@BindView(R.id.head_img) ImageView headImg;//点...原创 2018-04-14 13:46:00 · 213 阅读 · 0 评论 -
Okhttp - 4同步请求流程和源码分析
我们先看下OkHttpClient的内部类Builder()方法。public Builder() { /** * 核心之一,分发器类,会接收到同步、异步的请求队列, * 根据它所要的条件,来进行相应的同步、异步请求的分发。 */ dispatcher = new Dispatcher(); protocols = DE...原创 2018-04-18 11:13:06 · 475 阅读 · 0 评论 -
Okhttp - 5异步请求流程和源码分析
转载:https://blog.csdn.net/qq_24675479/article/details/79483193Enqueue方法总结1) 判断当前call。2) 封装成了一个AsyncCall对象。3) client.dispatcher().enqueue()。异步总结1)创建一个OkHttpClient对象。2)构建一个Request对象,通过OkHttpClient和Reques...转载 2018-04-18 14:21:04 · 196 阅读 · 0 评论 -
Okhttp - 6、任务调度核心类dispatcher解析
Q1、okhttp如何实现同步异步请求? 发送的同步 / 异步请求都会在dispatcher中管理其状态。Q2、到底什么是dispatcher? dispatcher的作用为维护请求的状态,并维护一个线程池,用于执行请求。Q3、异步请求为什么需要两个队列 ?我们可以知道,对于异步的请求队列,有一个是异步的执行队列和一个异步的等待队列。 这个可以理解为生产者和消费者模型Dispatcher–&g...原创 2018-04-18 17:01:18 · 330 阅读 · 0 评论 -
EventBus - 1 核心概念:事件传递/EventBus的优点/传统handler通信的两种方式(更新中)
传统的Android组件之间的通信方式有:Handler, 广播, 接口回掉,相对于EventBus来说,代码过于复杂。。 使用EventBus的建议:并不建议将应用中所有的事件都通过EventBus进行发送,尤其对于一对一的组件之间通信,建议不要使用EventBus。EventBus的使用场景更像是一种广播,当我们向EventBus发送一个事件,则该事件将会传递给多个该事件的订阅者...原创 2018-04-13 13:20:04 · 260 阅读 · 0 评论 -
EventBus - 2 基本用法
第一步:compile 'org.greenrobot:eventbus:3.1.1'第二步:定义一个事件Eventpublic class MyBusEvent { public final String message; public MyBusEvent(String message) { this.message = message; }}第三步:准备好我们的订阅者,同时需要在总线上注...原创 2018-04-13 13:25:43 · 123 阅读 · 0 评论 -
EventBus - 3 源码解析-1:EventBus对象构建/如何进行线程调度(整理中)
EventBus.getDefault().register(this);/** Convenience singleton for apps using a process-wide EventBus instance. */ public static EventBus getDefault() { EventBus instance = defaultInstance...原创 2018-04-13 13:55:52 · 230 阅读 · 0 评论 -
EventBus - 4 源码解析-2 subscribe注解/threadMode
接下来看下@Subscribe的源码,@Documented@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.METHOD})public @interface Subscribe { ThreadMode threadMode() default ThreadMode.POSTING; /** * I...原创 2018-04-13 14:10:20 · 1362 阅读 · 0 评论 -
EventBus - 5 源码解析-3:register订阅(上)
EventBus.getDefault().register(this);/** * Registers the given subscriber to receive events. Subscribers must call {@link #unregister(Object)} once they * are no longer interested in receiving event...原创 2018-04-13 14:37:17 · 135 阅读 · 0 评论 -
EventBus - 6 源码解析-4:register订阅(中)
private List<SubscriberMethod> findUsingInfo(Class<?> subscriberClass) { // 用来保存找到这些进行注解过的方法以及它们的状态,它主要是保存状态用的 // 再接下来看下prepareFindState(),是如何来帮助我们找到FindState对象的 ? ...原创 2018-04-13 15:17:10 · 133 阅读 · 0 评论 -
EventBus - 7 源码解析-5:register订阅(下)
这篇文章,主要分析一下checkAdd这个方法:if (findState.checkAdd(subscriberMethod.method, subscriberMethod.eventType)) { findState.subscriberMethods.add(subscriberMethod);}这个checkAdd方法,主要判断 subscriberMethod订阅好的方法,...原创 2018-04-13 15:49:04 · 224 阅读 · 0 评论 -
EventBus – 8 源码解析-6:subscribe方法完成订阅(上)
public void register(Object subscriber) { // = = = = = = = = = = = = = = = Class<?> subscriberClass = subscriber.getClass(); List<SubscriberMethod> subscriberMethods =...原创 2018-04-13 16:19:16 · 2647 阅读 · 0 评论 -
EventBus – 9 源码解析-7:subscribe方法完成订阅(下)
最核心的,分发事件checkPostStickyEventToSubscription(newSubscription, stickyEvent);我们跟进入看下这个方法,private void checkPostStickyEventToSubscription(Subscription newSubscription, Object stickyEvent) { if (s...原创 2018-04-13 16:50:39 · 222 阅读 · 0 评论 -
EventBus - 10 源码解析-8:发送事件post
/** Posts the given event to the event bus. */ public void post(Object event) { // PostingThreadState : 发送事件的一个线程状态的封装类 duanran // currentPostingThreadState 作用:线程独有的,不会让其他线程共享当前...原创 2018-04-13 17:12:03 · 116 阅读 · 0 评论 -
Okhttp - 2同步请求方法和3异步请求方法
接下来我们来看下OkHttpClient的一个静态内部类Builder。调用这个Builder方法就是为了所有的对象创建。public Builder() { /** * 核心之一,分发器类,会接收到同步、异步的请求队列, * 根据它所要的条件,来进行相应的同步、异步请求的分发。 */ dispatcher = new Dispat...原创 2018-04-18 10:13:35 · 382 阅读 · 0 评论 -
Okhttp - 1框架流程分析
OkHttpClient:(第一步)客户端的对象,表示所有HTTP请求的客户端的类,我们在执行的时候,只会创建一次,然后将它作为一个全局的实例进行保存,这样我们在OkHttp的其他地方调用的时候,只会使用到这一个单例对象。Request:(第二步)创建一个Request对象,封装了一些请求报文信息、请求URL地址、请求的方法(get\post等)、各种请求头,在它内部通过build,就是构建着模式...原创 2018-04-18 09:38:12 · 207 阅读 · 0 评论 -
Retrofit - 4 retrofit请求过程7步骤详解
第一步:添加retrofit库的依赖。增加网络权限。第二步:创建一个用于接收服务器返回数据的类型。public class MyResponse { String name; int age; String color; String address;}第三步:创建一个用于描述我们整个网络请求的接口。public interface MyInterface { @GE...原创 2018-04-14 14:18:18 · 654 阅读 · 0 评论 -
Retrofit - 5 静态代理模式
代理:只在意结果,过程由代理去做。例如:海外购物代理模式:为其他对象提供一种代理,用以控制对这个对象的访问。AbstractObject抽象对象角色。RealObject 目标对象角色。ProxyObject 代理对象角色。 +realObject持有目标对象的引用;为了可以在任何操作RealObject对象,而且和RealObject又有统一的接口。方便在任何时候替换掉目标对象。代码讲解:p...原创 2018-04-14 14:25:33 · 156 阅读 · 0 评论 -
Retrofit - 6 动态代理模式
无侵入 扩展代码。通俗来讲,就是可以做代码增强,让你在不修改原来代码基础上,增强一些方法或功能。动态代理:代理类在程序运行时创建的代理方式。相比于静态代理:动态代理很大的优势在于,它能很方便的对我们代理的函数进行统一的处理,而不用去频繁的修改每一个代理类的函数。两种动态代理的写法:1 jdk动态代理需要自己客户端来写辅助接口进行操作的。由JAVA内部的反射机制来实现的,所以说动态代理反射机制在生成...原创 2018-04-14 14:51:52 · 1270 阅读 · 0 评论 -
Retrofit - 7 网络通信流程8步骤 & 7个关键成员变量解析
网络通信八步:1) 创建retrofit实例。2) 定义一个网络请求接口并为接口中的方法添加注解。3) 通过 动态代理 生成 网络请求对象。4) 通过 网络请求适配器 将 网络请求对象 进行平台适配。5) 通过 网络请求执行器 发送网络请求。6) 通过 数据转换器 解析数据。7) 通过 回掉执行器 切换线程。8) 用户在主线程处理返回结果。【源码解析】使用的构建着模式。七个重要的成员变量publi...原创 2018-04-14 15:06:02 · 249 阅读 · 0 评论 -
Retrofit - 8 builder构建者模式&builder内部类解析
【总结】1主要做了配置平台类型的对象Android(platform);2配置网络适配器工厂、数据转换器工程、Executor异步回掉,默认值初化。原创 2018-04-14 15:08:42 · 285 阅读 · 0 评论 -
Retrofit - 9 baseurl/converter/calladapter解析
原创 2018-04-14 15:15:53 · 96 阅读 · 0 评论 -
Retrofit - 10 中build方法完成retrofit对象创建流程解析
/** * Create the {@link Retrofit} instance using the configured values. * <p> * Note: If neither {@link #client} nor {@link #callFactory} is called a default {@link * OkHttpC...原创 2018-04-14 15:16:58 · 210 阅读 · 0 评论 -
Retrofit - 11 retrofit中RxjavaCallAdapterFactory内部构造与工作原理解析
callAdapterRxJavaCallAdapterFactory【 理论 】Call<T> :首先获取到一个Call对象,然后拿这个Call对象去执行我们具体的HTTP请求,而Retrofit调用这个Call请求,其实还是调用的OKHTTP中的Call,只不过对它进行了封装。converter:获取到服务端返回的数据,需要调用converter数据转换器,把我们需要的对象转换处理...原创 2018-04-14 15:35:04 · 737 阅读 · 0 评论 -
Retrofit - 12 retrofit中网络请求接口实例解析
public interface MyInterface { @GET(“…/…”) Call<List<MyResponse>> getCall();}“…/…” 前面一部分是baseUrl地址,后面一部分是注解的那部分地址。注意:如果我们在注解后面参数已经设置一个完整的URL地址的话,那我们在设置Retrofit对象的时候可以不设置BaseUrl这个参数。以下...原创 2018-04-14 15:39:43 · 652 阅读 · 0 评论 -
Retrofit - 13 retrofit中serviceMethod对象解析
ServiceMethod serviceMethod = Retrofit.this.loadServiceMethod(method);OkHttpCall okHttpCall = new OkHttpCall(serviceMethod, args);return serviceMethod.callAdapter.adapt(okHttpCall);loadServiceMethod...原创 2018-04-17 17:12:01 · 536 阅读 · 0 评论 -
Retrofit - 14 retrofit中okHttpCall对象和同步请求&异步请求
重要的三行代码ServiceMethod<Object, Object> serviceMethod = (ServiceMethod<Object, Object>) loadServiceMethod(method);OkHttpCall<Object> okHttpCall = new OkHttpCall<>(serviceMethod, ...原创 2018-04-17 17:24:55 · 1637 阅读 · 0 评论 -
Retrofit - 15 retrofit设计模式解析
Retrofit源码设计模式解析(上) https://www.jianshu.com/p/b8c36c4a1aa8Retrofit源码设计模式解析(下) https://www.jianshu.com/p/80227c8180a9转载 2018-04-17 17:30:34 · 126 阅读 · 0 评论 -
Okhttp -定义常量和初始化对象
//创建队列,用于异步调用 private Request request; //线程阻塞方式调用 private Response response; //访问对象 private Call call; //okhttp实例 private OkHttpClient mOkHttpClient; //线程阻塞方式请求的...原创 2018-05-02 15:23:23 · 618 阅读 · 0 评论