猫侠的小窝

一步一步,盖个大房子……

Glide第一个过程

MoudleType -> DataType

MoudleType -> DataType 接口ModelLoader<T, Y>定义了返回实现了DataFetcher的对象。DataFetcher的对象是真正转换操作的执行者。ModelLoader<T, Y>可以看作是“工厂”。 从Uri到xxx 是否是本地资源协议:”file”、或”content”、或”android.resource”;如...

Glide的架构

Glide的架构

Glide的架构大体可分为4个部分:资源封装、构造请求、管理请求、执行请求。以下只列出默认实现中用到的类。 资源封装 Glide对用到的Android资源类都进行了一层封装。 // 对Drawable封装的基类。如果要显示到View上,必须转换成其子类。 abstract class GlideDrawable // 针对Bitmap的GlideDrawable。 class Glid...

使用Cookie

使用Cookie

设置Cookie策略 Retrofit默认是不使用Cookie的。但它提供了一个接口CookieJar。可以实现它以实现特定的Cookie策略。调用Retrofit.Builder.cookieJar()可使策略生效。保存读取Cookie的过程在BridgeInterceptor中。 JavaNetCookieJar 非持久化Cookie,即Cookie保存在内存中。 Persisten...

使用Retrofit建立长连接

使用Retrofit建立长连接

建立WebSocket连接 分为4个步骤: 创建OkHttpClient对象。 创建回调监听。回调监听是一个实现了WebSocketListener接口的对象。 创建Request对象,请求方法只能是GET。 调用OkHttpClient.newWebSocket(Request, WebSocketListener)发出请求。 HTTP协议升级为WebSocket协...

使用Retrofit上传和下载

使用Retrofit上传和下载

上传文件 // 把文件封装为RequestBody RequestBody body = RequestBody.create(MediaType.parse("multipart/form-data"), file); // 把RequestBody封装为MultipartBody.Part MultipartBody.Part part = MultipartBody.Part.cre...

声明式请求

声明式请求

重要的类 RealCall是OkHttp中描述一次请求过程的类。 OkHttpCall是RealCall的装饰类,扩展了构造Request对象的方法,和对Response对象的处理。 ServiceMethod是“扩展”的具体实现,即用动态代理实现声明式请求,用适配者模式实现对RealCall/Response对象的转换。 动态代理 在运行时动态地为实现类创建代理对象,以控制对执行者的...

OkHttp

OkHttp

建造者模式 建造者模式:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 使用场景: 当产品有复杂的内部构造时(参数很多); 需要控制构建顺序(属性赋值顺序)时。 主要构成: 目标类:最终生成的对象的类。 Builder类:包含目标类所有成员变量,并提供Getter/Setter方法。并提供成员变量的默认值。在biuld()中定义成员变...

网络基础知识

网络基础知识

OSI七层模型 从下到上: 物理层:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输。透明传输是指尽可能屏蔽掉具体传输介质和物理设备的差异。 数据链路层:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。 网络层:数据链路层的数据在这一层被转换为数据包,然后通过路径选择、分段组合、顺序、进/出路由等控制,将信息从一个网络设备传送到另一个网...

Binder机制

Binder机制

简介 Binder机制解决了用户空间中的进程A如何向进程B发送信息的问题。“发送信息”是指“进程A调用进程B的方法,向B传递参数,B执行完成后,把结果返回A”。Binder机制采用了CS架构。其中,发送信息的进程是“客户端”,执行任务的是“服务端”。主角是“1个缓冲区,2个线程池”。 1个缓冲区 “1个缓冲区”是指从Binder设备(/dev/binder)映射出的一块内存。这块内存以“h...

Handler机制

Handler机制

功能 使用“消息队列“,解决线程间/进程间同步问题;封装Binder机制,实现进程间通信。 重要的类 Looper:封装了一个MessageQueue;可以为某个线程添加一个MessageQueue,并使其运转起来;另外还可以插入/删除“同步分隔栏”;“同步分隔栏”也是一个Message,但是Message.target是null。 prepare():为调用线程添加一个Mess...