自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(8)
  • 问答 (1)
  • 收藏
  • 关注

原创 Android热修复及插件化原理

1.前言热修复一直是这几年来很热门的话题,主流方案大致有两种,一种是微信Tinker的dex文件替换,另一种是阿里的Native层的方法替换。这里重点介绍Tinker的大致原理。2.类加载机制介绍Tinker原理之前,我们先来回顾一下类加载机制。我们编译好的class文件,需要先加载到虚拟机然后才会执行,这个过程是通过ClassLoader来完成的。双亲委派模型:1.加载某个类的时候,这个类加载器不会自己立刻去加载,它会委托给父类去加载2.如果这个父类还存在父类加载器,则进一步委托,直到最

2021-01-26 14:26:49 2604 6

原创 用贝塞尔曲线画画

什么是贝塞尔曲线一句话解释:它可以将任何平滑曲线转化为精确的数学公式。例如PS中的钢笔工具,它的原理就是二阶贝塞尔曲线。一阶贝塞尔曲线一阶贝塞尔曲线描述的是从p0到p1的连续点,是一条直线。公式如下:B(t)=(1−t)p0+tp1,tϵ(0,1)B(t)=(1-t)p_{0}+tp_{1},t\epsilon (0,1)B(t)=(1−t)p0​+tp1​,tϵ(0,1)写成下面这...

2020-04-27 14:44:31 1172

原创 Gson源码解析(二)

Gson源码解析(二)反射机制详解接着上篇留下来的问题,Gson是怎么序列化我们自己创建的JavaBean对象?还记得在gson初始化时添加的一系列Factory吗,我们可以看到它添加了一个factories.add(new ReflectiveTypeAdapterFactory( constructorConstructor, fieldNamingStrategy, excluder, jsonAdapterFactory));看名字我们应该也可以猜出来这个Factory的作用,没错,它可以根

2021-06-25 17:45:28 134

原创 Gson源码解析(一)

Gson源码解析(一)Gson序列化流程我们从fromJson开始。public <T> T fromJson(String json, Class<T> classOfT) throws JsonSyntaxException { Object object = fromJson(json, (Type) classOfT); return Primitives.wrap(classOfT).cast(object);}经过几个fromJson重载方法后,会将我们

2021-06-25 17:44:06 283 1

原创 Android RecyclerView SnapHelper解析

SnapHelperSnapHelper是一个RecyclerView的工具类,本身是抽象类,默认有两种实现LinearSnapHelper和PageSnapHelper。他们的主要作用是帮助ReyclerView自定义滑动方式,可以实现像ViewPage或者Gallery的滑动方式(一次翻一页或者一次翻多页)。PagerSnapHelper效果:一次只能滑动一个Item,总是中心对齐。使用方法: rv.let { it.layoutManager = L

2020-09-30 16:45:03 1402

原创 郭神Glide学习笔记

GlideGlide.with(context).load(url).into(imageView)  如果传入的是activity或是Fragment,则会向当前的视图中添加一个隐藏的Fragment,用来感知宿主生命周期。宿主死亡关闭图片加载,防止内存泄漏目录缓存Glide回调图片变换Generated API缓存Glide处理的图片分两种类型:RESULT(处理后的图片)、SOURCE(原图),它默认只显示处理后的图片,对图片进行了压缩、旋转等操作。内存缓存Glide默认是

2020-07-01 10:24:34 265

原创 通过JitPack发布你的Android库

虽然官方也有很详细的文档(官方文档),但我还是要水一篇(因为这个过程很容易出错,一找就是半天,在这里记下我遇到的坑)。1.创建一个项目并New一个Module。将你封装好的代码放入module中,例如这里的loadingview。2. 在你的project / build.gradle中添加android-maven插件。buildscript { dependencies { ...

2020-04-24 11:35:20 506 1

原创 Fragment相关常用方法解析

Fragment相关常用方法的解析,一些特殊情况下生命周期的调用。

2019-08-08 12:02:28 638

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除