使用 Maven地址 debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10' 因为是线下检测,所以依赖模式为debug,其余不用配置也可以直接使用了。 源码分析 核心原理 在Activity、Fragment、View等销毁时,利用弱引用依赖他们,当过5秒之后去进行检测和GC,若还存在未被回收,...
EventBus使用和解析
使用 依赖 Maven地址 implementation 'org.greenrobot:eventbus:3.3.1' 使用 绑定事件 @Subscribe(threadMode = ThreadMode.MAIN, sticky = false, priority = 1) fun notice() { } 注册对象 override fun onCreate(sav...
ARouter使用和解析
依赖 模块gradle中增加 plugins { id 'kotlin-kapt' } android { defaultConfig { kapt { // 模块名 arguments { arg("AROUTER_MODULE_NAME": project.getName...
Java注解介绍
元注解 1、@Documented: 用于标记在生成javadoc时是否将注解包含进去,可以看到这个注解和@Override一样,注解中空空如也,什么东西都没有。 2、@Target 用于定义注解可以在什么地方使用,默认可以在任何地方使用,也可以指定使用的范围,开发中将注解用。 字段 作用 Ele...
Retrofit使用和解析
使用 众所周知,Retrofit只是对OkHttp的一层封装,目的是为了让OkHttp使用起来更便捷。主要就是对Request对象的构建进行了一层封装,使我们只需要定义好借口的形式就OK,使用起来更偏向方法的直接调用(结合协程)。然后是对Call进行了包装对返回结果进行了处理,加入了解析器,可以直接返回我们所需要的对象。 依赖 implementation("com.squareup....
Http介绍
MediaType.parse(String) Content-Type、MediaType是什么? MediaType,即是Internet Media Type,互联网媒体类型,也叫做MIME类型,在Http协议消息头中,使用Content-Type来表示具体请求中的媒体类型信息。(也就是说MediaType在网络协议的消息头里面叫做Content-Type)它使用两部分的标识...
OkHttp使用和解析
使用 添加依赖 包含okhttp和其使用的okio库 implementation "com.squareup.okhttp3:okhttp:4.9.3" 创建OkHttpClient对象 val httpClient = OkHttpClient.Builder() .connectTimeout(15, TimeUnit.SECONDS) // 链接超时 ...
SparseArray源码解析
简介 对于在HashMap以及ArrayMap中,在存入int类型的key时,也必须有装箱的这一步操作。而SparseArray就是来解决int装箱问题的Map(虽然用法和Map几乎一样,但并没有继承至map,名字上也没有叫map),同ArrayMap一样,SparseArray也是利用的二分法,但value数组只存value,大概减少1/3的容量,因为key是int,所以也不纯在hash...
ArrayMap源码解析
简介 ArrayMap是专门针对内存优化设计的,因为HashMap为了快速查询带来了一定的空间浪费。而ArrayMap基于双数组设计,二分法查找,支持缩容,在比较小的数量级情况下拥有不错的效率。 原理 基本结构 // 永远都是false,所以使用的基本为对象的hashcode private final boolean mIdentityHashCode; // hash的数组 in...
LinkedHashSet源码解析(JDK8)
简介 LinkedHashSet是一个可以保持添加顺序的Set集合。继承至HashSet,内部使用了HashSet预留的构造方法,内部的HashMap为LinkedHashMap的实现。 源码 public LinkedHashSet(int initialCapacity, float loadFactor) { super(initialCapacity, loadFa...