彻底弄懂 Glide v4 之宏观原理分析

最初阅读 Glide v3 的源码时,感觉 Glide 的源码比我想象中复杂得多。复杂主要是因为有些对象的调用链很长,从初始化到实际使用中间隔了很多层。并且为了高扩展性,Glide 使用了大量接口,并根据需求分配不同的实现类。想要找到实际的实现类,确实要费点功夫。后来 Glide v4 的源码改进了不少,类的继承...

从 synchronized 到 CAS 和 AQS - 彻底弄懂 Java 各种并发锁

概述Java 中的并发锁大致分为隐式锁和显式锁两种。隐式锁就是我们最常使用的 synchronized 关键字,显式锁主要包含两个接口:Lock 和 ReadWriteLock,主要实现类分别为 ReentrantLock 和 ReentrantReadWriteLock,这两个类都是基于 AQS(Abstrac...

从 ClassLoader 到热修复

ClassLoaderJVM 在运行时,并不会一次性加载所有的类到内存中,而是只在需要的时候加载。而 ClassLoader 就是用来将 .class 文件加载到内存中的类。 JVM在判定两个class是否相同时,不仅要判断两个类名是否相同,而且要判断是否由同一个类加载器实例加载的。只有两者同时满足的情况下,J...

彻底弄懂 Java 线程池原理

概述这篇文章是我在阅读源码时整理的一些笔记,对源码的关键点进行了比较详细的注释,然后加上一些自己对线程池机制的理解。最终目的是要弄清楚下面这些问题: 线程池有 execute() 和 submit() 方法,执行机制分别是什么? 如何新建线程? 任务如何执行? 线程如何销毁?超时机制如何实现? 首先需要介绍一...

HashMap 查漏补缺

HashMap 是面试的钉子户了,网上分析的文章也有很多,相信大家对于原理已经烂俗于心了。但最近在看源码时,发现其中一些实现细节其实不太好理解,所以决定以问答的形式在这里记录一下,写的时候尽量把原因说明白。 容量和 size 分别指什么?容量并不是指 HashMap 所能存储的键值对数量,而是其内部的 table...

OkHttp 原理分析

运行机制 OkHttp 使用各种拦截器来完成发送请求,重试和缓存等等功能。一般的网络请求,OkHttpClient 会构造一个 RealCall 方法来完成。RealCall 的 execute 方法中构建调用链并执行网络请求。 构造拦截器调用链时,将所有拦截器放在 ArrayList 中,将此 List 和要执...

【译】如何提升Android代码的质量和语法

原文链接 : How to improve quality and syntax of your Android code 原文作者 : Vincent Brison 译文出自 : 掘金翻译计划 译者 : 尹述迪 校对者: laobie 状态 : 完成 在这篇文章中,我会介绍几种不同的方式,让你通过自动...

【译】什么是Context?

#原文地址 : Context,What Context?#引言Context可能是安卓程序中使用频率最高的元素,同时,也可能是被误用最多的元素. Context对象非常普遍,并会被频繁地传递,这会使你遇到一些未曾预料的问题.加载资源,启动一个新的Activity,获取一个系统服务,获取内部文件的路径以及新建Vi...

AsyncTask使用中的那些坑

公司目前的项目是个二次开发的项目,加上我接手时项目开发只有我和另外一个实习生,一切都需要自己摸索,导致项目中出现了很多历史遗留问题.好在经过不断的优化,现在的项目已经趋于稳定.早期项目的崩溃率非常高,好在大部分崩溃能在框架中统一处理.比如AsyncTask.下面总结一下AsyncTask中常见的坑: AsyncT...