王威拓

Keep on going never give up

Glide源码解析(二)

一、前言    在上一篇文章Glide源码解析(一)中我们了解了Glide的基本加载流程,这一次我们针对Glide的缓存机制来分析一下,来看看Glide到底是如何进行图片缓存的。 二、缓存介绍 1.简介    关于Glide的缓存大致为分活动缓存(ActiveResources)、Lru内存缓存(LruResourceCache)和硬盘缓存,其中活动缓存和Lru内存缓存都是内存中的,随着应用......

Glide源码解析(一)

一、前言 1.基本加载流程    下面是Glide最简单的加载图片的方式: 123Glide.with(Context) .load(url) .into(imageView);    虽然只有简单一句话,但是按照官方的说法,背后有成吨的代码来实现。接下来会对这行代码进行具体的梳理,来看看Glide是如何加载一张图片的。 二、加载流程解析 1.with( )方法 1)With ......

多边形的内缩算法(二)—单边内缩

1.前言    在多边形的内缩算法(一)中,介绍了全边内缩和外扩的思路和方法,但实际项目中有特定边内缩的需求(比如特定边界线外侧存在障碍物,为了安全起见需要内缩),故而在全边内缩的思路上进行改进和优化,衍生出单边内缩算法。先上最终的效果图,下图的每条边界内缩距离不相等。 2.概述 1)与全边内缩相比的差异    对于上一篇文章中提到的全边内缩(外扩)来说,因为每条边的内缩(外扩)距离都是相......

多边形的内缩算法(一)—全边内缩或外扩

1.概述    在无人机执行航线往复作业过程中,由于边界点或障碍点位置选取的精准度偏差(使用打点器打点时的定位精度问题)和无人机自身的定位精度及控制问题,往往需要在计算航点路径的时候,与边界区和障碍区预留出安全距离,防止因上述原因导致无人机飞出边界或者飞入障碍区发生事故。    因此在实际计算过程中,可以通过对边界区内缩、对障碍区外扩的方式来预留安全距离,尽而使得航点生成可靠。下图是边界区内......

判断两个多边形的位置关系算法

1.概述    在平面几何运算过程中,经常需要判断两个多边形的几何位置关系,常见的几何位置关系有相离、相切(内切和外切)、相交等。多边形的位置关系,可以从线与线的位置关系、点与多边形的位置关系两个方面来切入,其中主要的算法是跨立算法和射线算法。 2.跨立算法 1)两线段相交    跨立算法就是利用向量的叉乘来判断线与线是否相交,这里首先要引用向量的叉乘。假设向量A(x1,y1),向量B(x2......

自定义View-仿Android原生动画效果的圆形Checkbox

1.概述    Android原生的方形Checkbox带有画勾的动画效果,转换成圆形Checkbox则不生成,于是决定通过自定义View来实现,下面先上实现后的效果图。 2.实现步骤    为了实现效果,先将原生控件进行步骤分解。主要实现分为三个部分,绘制背景、绘制勾以及绘制水波纹。 1)绘制背景    原生的方形Checkbox的背景是用类似裁剪方式来绘制的,因为当控件的布局添加了背景后......

深入理解JVM—总结

1.概述    JVM是Java Virtual Machine(Java虚拟机)的缩写,是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。    Java语言的一个非常重要的特点——跨平台性,也是通过Java虚拟机实现的。JVM屏蔽了与底层操作系统平台相关的信息,使得Java程序只需在JVM上运行目标字节码,便能实现在Java虚拟机上......

深入理解JVM—Java内存模型与线程

1.Java内存模型    Java内存模型的定义是为了屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果,并且制定程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。这里的变量指的是实例字段、静态字段和构成数组对象的元素,不包括局部变量和方法参数,因为后者是线程私有的。 1)主内存和工作内存    Java......

深入理解JVM—虚拟机类加载机制

1.类加载的过程    类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)七个阶段。其中验证、准备、解析3个部分统称为连接(Linking)。七个阶段的发生顺序如下图所示......

深入理解JVM—垃圾收集器与内存分配策略

1.对象存活判定 1)引用计数算法    给对象添加一个引用计数器,每当有一个地方引用它时,计数器值就加1;当引用失效时,计数器的值就减1。当计数器为0的对象就是不再被使用的。    引用计数算法的实现简单,判定效率也很高,但是在主流的Java虚拟机里面没有选用它来管理内存,很大原因就是无法解决对象之间的相互循环引用的问题。 2)可达性分析算法(Reachability Analysis) ......