
原理解析
依生依世
ここを始め、世界に痛みを感じさせよ
展开
-
增量Lint检测实现原理
增量Lint检测实现原理一.基本思路二.实现1.自定义LintClient2.增量检查文件3.其他自定义类4.自定义Gradle插件在Lint实现原理里已经知道,Lint检测的文件,默认是Project的javaSourceFolders和resourceFolders,但是这样会造成每次Lint检测的时间很长,我们pipeline的效率就很低;所以我们设想要做到一种增量检查:每次只检查改动的文件一.基本思路我们先回顾一下获取要检测文件的方式:val files = project.subseti原创 2020-12-15 16:19:34 · 1101 阅读 · 3 评论 -
Lint实现原理
Lint实现原理一.LintTask二.LintOptions配置1.创建2.配置3.获取三.Lint执行触发ReflectiveLintRunnerLintGradleExecutionLintGradleClient(extends LintCliClient)四.Lint规则定义DetectorRegistry五.Lint检测流程Scopeanalyze()1.解析自定义规则2.解析所有Detector3.Lint规则检查(1)AndroidManifest.xml(2)Resource .xmli.原创 2020-12-14 22:07:01 · 1784 阅读 · 0 评论 -
RxJava2.0 源码剖析
RxJava2.0 源码剖析一.Observable(被观察者/发射器)二.Subscribe(订阅事件)三.Observer(观察者)这里我们先以一个最基础的使用case,来分析RxJava的实现原理。Observable.create(ObservableOnSubscribe<Int> { emitter -> (1..3).forEach { emitter....原创 2019-12-26 21:53:54 · 267 阅读 · 0 评论 -
Android AppBarLayout吸顶位置错误问题
Android AppBarLayout吸顶位置错误问题我们通常会用AppBarLayout来做一些复杂滚动和吸顶的效果,比如如下代码:<?xml version="1.0" encoding="utf-8"?><android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.and...原创 2019-07-31 19:22:01 · 1997 阅读 · 0 评论 -
Android 动画 原理解析
Android 动画 原理解析一.View动画(一)基本使用1.代码实现2.xml实现(二)原理解析1.实现原理2.源码分析(1)Animation类(2)流程分析二.布局动画(一)基本使用1.xml实现2.代码实现(二)原理解析1.实现原理2.源码分析(1)解析设置LayoutAnimationController(2)dispatchDraw()三.属性动画(一)基本使用1.代码实现2.xml...原创 2019-07-31 16:35:00 · 837 阅读 · 0 评论 -
Android 动态权限机制详解
Android 动态权限机制详解一.权限系统(一)6.0之前(二)6.0之后(三)8.0二.兼容适配(一)TargetSdkVersion(二)适配方法1.检查权限2.请求权限3.请求权限的结果4.适当的提示5.Fragment的权限请求6.流程图总结一.权限系统(一)6.0之前Android为一些操作提供了必要的权限,比如我们的app想访问网络,就需要有网络权限android.permis...原创 2019-07-31 15:47:45 · 2548 阅读 · 0 评论 -
Android 编码解码的原理解析
Android 编码解码的原理解析一.字符集1.字符集的由来2.字符集的演变(1)ISO-8859-1字符集(2)GB2312/GBK字符集(3)Unicode字符集(4)UTF-8编码方式二.编码解码1.编码和解码2.Java中的编码解码3.URL的解码编码三.android中的编码解码一.字符集1.字符集的由来计算机识别、处理、传递、存储数据,都是基于一个个的字节,一个字节有8为,每...原创 2019-07-31 15:33:49 · 1861 阅读 · 0 评论 -
Android Binder 原理解析
Android Binder 原理解析一.跨进程通信1.进程隔离2.用户空间/内核空间3.系统调用/内核态/用户态4.内核模块/驱动二.为何使用Binder三.Binder通信原理四.Binder实现1.IBinder/IInterface2.Binder/BinderProxy(1)Binder(2)BinderProxy3.AIDL/Stub/Proxy(1)AIDL(2)Stubi.atta...原创 2019-07-31 11:45:52 · 1143 阅读 · 13 评论 -
Android ButterKnife 使用及原理解析
Android ButterKnife 使用及原理解析一.引入依赖二.简单使用1.绑定view、views、resources2.view事件绑定3.设置view或一组view的操作4.执行ButterKnife的绑定三.实现原理1.实现原理2.工作流程3.bind流程及实例四.其他说明ButterKnife是编译器型的注解工具,还有一种依赖注入型的注解工具RoboGuice,可以参考这篇文章。...原创 2019-07-31 11:19:07 · 507 阅读 · 0 评论 -
Android View位置跳动问题
Android View位置跳动问题有时我们会遇到当页面刷新后,类似NestedScrollView和RecyclerView这种可滑动View的滚动位置会变化一下,和原先不一致通过调试我们发现,是因为页面里有RecyclerView这种可以获取焦点的View,跟踪代码得知,当这种View的一些flag属性变化时:如Visibility、focusable、enable等,会尝试去re...原创 2019-07-31 19:34:46 · 889 阅读 · 0 评论 -
Android 8.0/8.1 channel适配
Android 8.0/8.1 channel适配一.背景二.问题三.原因8.0系统源码8.1系统源码四.解决一.背景Android 8.0(target=26)的适配中,有一个关于Notification的适配点:8.0开始使用Notification时候,需要指定一个渠道channel,用来将不同的通知类型分类管理,通常我们的代码会如下处理//service.startForegroun...原创 2019-08-01 10:16:01 · 5692 阅读 · 1 评论 -
Android 8.0/8.1 screenOrientation适配
Android 8.0/8.1 screenOrientation适配一.问题二.原因1.Android 8.02.Android 8.13.Android8.0以下和Android9.04.总结三.解决1.设置targetSdkVersion为26及以下2.修改Activity的style3.修改Activity的screenOrientation一.问题在适配完Android9.0,即ta...原创 2019-08-01 10:29:57 · 1738 阅读 · 1 评论 -
Android 6.0 View行为变更适配
Android 6.0 View行为变更适配一.相关知识参考二.异常现象分析(一).正常情况(二).异常情况(三).异常行为分析1.为何ScrollView滑动不上去了,而RecyclerView可以自己滑动2.为何RecyclerView的高度发生改变3.UNSPECIFIED的size如何影响RecyclerView测量4.UNSPECIFIED的size为何不为0(1)6.0之前的Scrol...原创 2019-08-01 11:33:05 · 469 阅读 · 0 评论 -
AspectJ 使用及原理
AspectJ 使用及原理一.简介二.原理三.使用(一)基本概念1.连接点(JoinPoint)2.切点(PointCut)3.插入逻辑(Advice)4.切面(Aspect)(二)类型匹配表达式1.注解2.修饰符3.返回值4.类5.方法名6.方法参数7.组合使用(三)切入点组合表达式1.call/execution2.this3.target4.within5.args6.注解支持7.组合使用8...原创 2019-08-01 15:08:57 · 5764 阅读 · 0 评论 -
Android 代理拦截系统层代码
Android 代理拦截系统层代码一.手动代理1.溯源2.手动代理二.动态代理1. 溯源2. 动态代理有时我们的项目会遇见如下所示的崩溃堆栈:android.app.RemoteServiceException: Context.startForegroundService() did not then call Service.startForeground() at android.ap...原创 2019-08-06 11:31:10 · 677 阅读 · 0 评论 -
Javassist使用
Javassist使用一.简介二.使用(一)class1.获取2.新建3.内部类4.更新(二)constructor1.获取2.新建3.修改方法体(1)insertBefore/insertAfter(2)setBody(3)修饰符(三)field1.获取2.新建3.setter/getter(四)method1.获取2.新建3.setter/getter(五)参数使用(六)static1.获取2...原创 2019-08-01 15:51:50 · 1725 阅读 · 0 评论 -
Android SharedPreferences实现原理
Android SharedPreferences实现原理一.简介二.实现原理1.创建2.取值3.更新4.应用(1)commit()(2)apply()三.总结一.简介在Android中,我们通常会需要存储一些数据,有一些大型的数据诸如图片、JSON数据等,可以通过读写File的方式实现;有一些大量级的关系型数据,可以通过数据库SQLite实现;还有一些简单的、无安全风险的键值对数据,可以通过...原创 2019-09-03 19:11:40 · 2109 阅读 · 0 评论 -
Android Glide 原理解析
Android Glide 原理解析一.提供的功能特性二.简单使用三.源码结构1.内存缓存(1)MemoryCache(2)BitmapPool(3)二级内存缓存2.磁盘缓存3.图片对应的Key4.Glide对象5.RequestManager—绑定生命周期6.GenericRequestBuilder对象7.Target对象8.RequestTracker对象9.Engine、EngineJob...原创 2019-07-31 10:50:33 · 7357 阅读 · 0 评论 -
Android ListView 原理解析
Android ListView 原理解析一.模块分析1.列表控件2.Adapter适配器3.RecycleBin回收机制二.View布局流程分析1.ListView的layoutChildren()方法2.fillFromTop()方法-→fillDown()方法ViewGroup顶部到底部设置view3.makeAndAddView()4.obtainView()5.setupChild()三...原创 2019-07-30 19:54:28 · 935 阅读 · 0 评论 -
对称和非对称加密
对称和非对称加密一.对称加密二.非对称加密1.数据加密2.签名认证3.公钥安全性三.应用一.对称加密对称加密方法是指发送方和接收方在通信前,先协定一把同样的私钥,然后用同一把私钥进行数据的加密和解密。常用的对称加密算法有DES、RC、AES等。对称加密的优点:算法公开、计算量小、加密更快,通常用于加密大量数据。对称加密的缺点:每个通信双方需要一把密钥,n个通信方就需要n*(n-1)把...原创 2019-07-29 11:29:13 · 1057 阅读 · 0 评论 -
Android 签名/认证机制
Android 签名/认证机制一.V1签名(一)签名方式1.MANIFEST.MF2.CERT.SF3.CERT.RSA4.总结(二)安装时校验1.认证CERT.RSA2.认证CERT.SF3.认证MANIFEST.MF4.认证开发者身份(三)总结二.V2签名(一)签名方式1.签名方式2.签名数据(二)安装时校验1.V2校验入口2.获取签名数据(1)验证签名信息(2)验证摘要3.向后兼容(三)总结...原创 2019-07-29 14:31:52 · 2123 阅读 · 1 评论 -
Kotlin 泛型
Kotlin 泛型一.概念二.Java协变三.Kotlin协变(一)声明处协变(二)使用处协变一.概念java里的泛型想必大家都很了解了,是java系统提供的一个特性,便于我们在设计代码时,可以将一部分内容设置为可变的,比如最常见的class List集合类,T可以为任意类型,比如我们想要String的集合就是List,想要Object的集合就用List,这样一来,通过一个类的书写就可以产生"...原创 2019-07-29 14:47:48 · 229 阅读 · 0 评论 -
Kotlin 协程之一:基础使用
@[TOC](Kotlin 协程(一):基础使用)阅读完后,可以深入理解其实现原理。一.什么是协程kotlin在1.3版本后,提供了协程coroutine库,协程提供了一种,简化异步任务处理的方案。二.为什么用协程1.简化代码,增加可读性使用协程可以用简洁直观可读性高的写法,实现多重依赖关系的异步任务的书写。先来回想一下我们平时的异步任务怎么实现呢?(1).通过Callback回调...原创 2019-07-29 15:24:54 · 2085 阅读 · 0 评论 -
Kotlin 协程之二:原理剖析
Kotlin 协程之二:原理剖析一.协程的工作原理1.协程作用域(运行环境)-CoroutineScope2.协程任务执行环境-Dispatcher(1)Dispatcher.Main(2)Dispatcher.IO线程池-CoroutineScheduleri.尽量使用当前线程ii.双重队列iii.抢占其他线程的任务3.协程任务-Coroutine(1)AbstractCoroutine(2)B...原创 2019-07-29 15:52:46 · 3773 阅读 · 2 评论 -
Kotlin 协程之三:Android中的应用
Kotlin 协程之二:Android中的应用1.将线程改为协程2.将网络请求改为协程3.生命周期系列文章:至此,我们完全了解了协程的使用和实现原理,那么如何应用到我们Android项目中呢?这里讲一些简单的例子。1.将线程改为协程通常我们有一些小的延时任务或异步任务,会使用线程池来解决,这里我们可以用协程来解决,比如:在页面创建后,异步读取数据库中的内容,然后展示到TextView上。...原创 2019-07-29 15:55:34 · 961 阅读 · 1 评论 -
Android View 绘制流程之一:measure测量
Android View 绘制流程之一:measure测量一.MeasureSpec测量规格二.LayoutParams布局参数1.ViewaddViewLinearLayout的generateDefaultLayoutParams2.xml三.Measure整体流程四.常见onMeasure实现1.测量子View方法(1)measureChildren()(2)measureChild()(3...原创 2019-07-29 18:02:37 · 1392 阅读 · 3 评论 -
Android View 绘制流程之二:layout布局
Android View 绘制流程之二:layout布局一.layout整体流程二.常见onLayout实现1.FrameLayout的onLayout2.LinearLayout的onLayout3.RelativeLayout的onLayoutlayout(int left,int top,int right,int bottom)方法是View测绘系统的第二步,布局过程,是在measure...原创 2019-07-29 18:11:20 · 645 阅读 · 0 评论 -
Android View 绘制流程之三:draw绘制
Android View 绘制流程之三:draw绘制一.draw方法的整体流程二.drawBackground实现三.onDraw四.dispatchDraw的实现五.ScrollBar的绘制draw()方法是View系统测绘流程的最后一步,就是绘制,当view测量完大小、确定完位置后,就需要在其位置处绘制出其内容等视觉上的东西;View的draw方法有固定的流程,一般ViewGroup需要在d...原创 2019-07-29 19:13:30 · 3688 阅读 · 1 评论 -
Android View 绘制流程之四:绘制流程触发机制
Android View 绘制流程之四:绘制流程触发机制一.View状态的改变(包括Background的drawable状态改变)1.setEnable()2.setPressed()3.setSelected()4.refreshDrawableState()二.View焦点的改变1.findFoucs()2.getFocusedChild()3.hasFocus()/hasFocusable...原创 2019-07-29 19:28:36 · 2076 阅读 · 0 评论 -
Android View 触摸机制
Android View 触摸机制一.接收触摸事件开始派发二.根view派发触摸事件三.ViewGroup派发触摸事件四.View派发触摸事件五.onTouchEvent()六.多点触摸1.基本概念2.PointerId、PointerIndex概念及多点触摸相关方法3.多点触摸相关实现(1)维护targets列表(2)根据需要的pointerId拆分MotionEvent进行派发(3)如何进行拆...原创 2019-07-29 19:54:26 · 723 阅读 · 0 评论 -
Android ViewDragHelper使用及原理
Android ViewDragHelper使用及原理1.初始化2.拦截事件处理3.拖动事件处理(1)拖动(2)释放(3)滚动ViewDragHelper类,是用来处理View边界拖动相关的类,比如我们这里要用的例子—侧滑拖动关闭页面(类似微信),该功能很明显是要处理在View上的触摸事件,记录触摸点、计算距离、滚动动画、状态回调等,如果我们自己手动实现自然会很麻烦还可能出错,而这个类会帮助我们...原创 2019-07-30 10:57:11 · 816 阅读 · 0 评论 -
Android Retrofit 原理解析
Android Retrofit 原理解析一.基本使用二.源码分析1.Retrofit.Builder构建参数2.可配置项(1)CallFactory(2)ConverterFactory(3)CallAdapterFactory(4)CallbackExecutor3.Retrofit.create动态代理生成请求对象4.ServiceMethod(1)创建(2)解析方法注解(3)解析参数注解(...原创 2019-07-30 16:23:32 · 3316 阅读 · 0 评论 -
Android RecyclerView 原理解析
Android RecyclerView 原理解析一.模块分析1.列表控件2.LayoutManager3.Recycler回收机制二.View布局流程分析1.LinearLayoutManager的onLayoutChildren()方法2.fill()方法3.recycleByLayoutState()4.layoutChunk()三.滚动时view的展示与复用1.拖动滚动2.Fling滚动3...原创 2019-07-30 17:49:08 · 3767 阅读 · 0 评论 -
Android Picasso 原理解析
Android Picasso 原理解析一.提供的功能特性二.简单使用三.源码结构1.整体类图2.内存缓存3.磁盘缓存4.Picasso对象5.RequestCreator对象6.Action对象7.Dispatcher对象8.RequestHandler对象9.BitmapHunter对象10.图片对应的Key(1)内存缓存(2)磁盘缓存四.流程分析一.提供的功能特性使用默认的内存缓存和...原创 2019-07-30 18:03:10 · 1038 阅读 · 0 评论 -
Android NestedScrolling 嵌套滚动原理解析
Android NestedScrolling 嵌套滚动原理解析一.原有问题二.解决方案1.实现原理2.方案设计(1)android的support-v4包提供了两个接口来实现NestedScroll框架(2)android的support-v4包也提供了两个相应的Helper类来实现通用功能(3)兼容性(4)流程三.源码分析NestedScrollView/ScrollView四.NestedS...原创 2019-07-30 18:48:04 · 1432 阅读 · 0 评论 -
HTTPS原理
HTTPS原理一.背景二.原理三.设计四.特点一.背景HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决数据传输的安全问题,诞生了SSL(安全套接字层)/TLS协议,依靠数字证书来验证服务器客户端的身份并未数据通信进行加密,位于TCP/IP协议与各个应用层协议之间...原创 2019-07-29 11:12:34 · 253 阅读 · 0 评论