薛瑄
大道至简
展开
-
Gradle 源码分析
这是一篇Gradle 进阶文章,我假设你已经会 gradle task,自定义plugin 开发。我会带你从源码分析Gradle的整体过程,不会涉及具体的细节,如果分析过细,够写一本书了。建议你参照文章 反复阅读源码,一定会有写这本书的能力。文章是基于Gradle 6.7版本文章目录一、 启动Gradle下载指定版本的Gradle启动Gradle流程二、 Gradle 的五大流程2.1 LoadSettings2.1.1 、生命周期接口回调2.1.2 、执行init.gradle2.1.3 、查找sett原创 2021-07-05 21:05:10 · 1223 阅读 · 4 评论 -
Kotlin Coroutine 源码解析(1) —— 协程是如何运行的
前言在刚接触协程的时候,就产生了一个疑问,协程到底有没有创建线程,如果有,那它和线程池有什么区别?如果没有,为什么在android的主线程中不会 阻塞,了解Android源码的 应该猜到了,肯定是创建了子线程,不然 就会报异常了。那协程又是如何保证任务能切换到主线程呢? 下面就带着这几个问题,来分析协程的源码示例用下面的示例 模拟获取token,请求网络的过程。顺序执行,不会阻塞当前线程,fun main() { GlobalScope.launch { println("开始 ")原创 2021-01-27 18:53:41 · 1962 阅读 · 3 评论 -
DataBinding源码深入分析
在使用databinding时,更新UI界面,如果是使用普通变量的,那么在变量发生变化的时候,UI界面并不会发生变化一、数据绑定视图跟随数据刷新数据变化是视图也跟着变化则需要使用到以下两种方法继承BaseObservableObservableField,databinding默认实现了一系列实现Observable接口的字段类型BaseObservable,Observable...原创 2019-04-17 19:39:39 · 1673 阅读 · 0 评论 -
Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理
一、Lifecycle 介绍Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。这些组件可帮助您生成更易于组织且通常更轻量级的代码,这些代码更易于维护。二、使用方法先来看一下如何使用,这样再去分析源码就能有的放矢,1.添加依赖...原创 2019-06-03 15:50:36 · 9771 阅读 · 4 评论 -
LiveData 使用与源码分析——完全搞懂LiveData原理
一、LiveData简介LiveData是google官方架构JetPack系列的一个响应式开发框架,LiveData是一个可以被观察的数据持有者类。说到响应式开发或者说观察者就不免想到RxJava,RxJava将观察者模式运用的炉火纯青。但LiveData和RxJava的定位是不一样的,LiveData主要用于搭建MVVM架构,并在其中作为数据持有者,LiveData能监听组件的生命周期变化,...原创 2019-06-04 16:41:05 · 10853 阅读 · 2 评论 -
深入分析Glide源码
前言最近研究了一下Glide源码,发现很多地方写的真的很精妙,值得细细品味。Glide 功能丰富,图片三级缓存、可深度定制(继承AppGlideModule、LibraryGlideModule实现更多功能)、修改网络请求库、支持多种输入输出资源的转换(例如输入Stream,输出bitmap等等)、生命周期的管理虽然下面分析完了,整体的流程,但是想要真正领会设计思想,还需要好好沉淀一下。文章篇幅比较长,但逻辑并不复杂一、基本使用流程Glide最基本的使用流程就是下面这行代码,其它所有扩展的额外功能都原创 2020-08-01 17:43:42 · 5754 阅读 · 3 评论 -
缓存——RecyclerView源码详解(二)
前言这篇文章,继续RecycleView 的分析,来看看 从缓存获取View和 把View保存到缓存中缓存的相关都是交给 Recycler 类来处理的,包括存储缓存,获取缓存等。缓存的数据类型是ViewHold,它包含了itemView,mPosition 等Item的信息从缓存获取ViewHold先来了解Recycler中五个变量,每个变量都与缓存相关,按照缓存获取的顺序来逐一介绍一级缓存:返回布局和内容都都有效的ViewHolder按照position或者id进行匹配命中一级缓存无需o原创 2020-11-27 10:55:40 · 804 阅读 · 0 评论 -
整体流程、Measure、Layout 详解——RecyclerView源码详解(一)
前言整体流程、measure、layout 详解 ——深入分析RecyclerView源码(一)缓存 ——深入分析RecyclerView源码(二)滑动和动画 ——深入分析RecyclerView源码(二)本篇文章分析主体流程,先来整体看一下RecycleView的 结构图片来自RecycleView 是一个ViewGroup,想要显示数据集Datas,需要通过适配器Adapter,把数据转为对应的View,这样就可以添加到RecycleView中了。(适配器模式)由于屏幕能显示View原创 2020-11-11 17:25:36 · 1943 阅读 · 1 评论 -
Android 图形架构 之六——深入分析draw()是如何工作的
前言前面我们分析了 app进程中的 addView 的执行过程,其中涉及到了ViewRootImpl,WMS,Session,WindowState,Surface 等等,最后分析到performDraw() 函数,接下来,我们就继续来分析,带着两个问题,它是如何把数据写入生产者队列的,已经SurfaceFlinger 何时开始处理的?Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer原创 2020-10-19 17:09:49 · 2762 阅读 · 0 评论 -
Android 图形架构 之五—— 深入分析addView所发生的的一切
前言前几篇文章,分析了在SurfaceFlinger 进程,WMS进程 中,图形架构的流程和关键类的介绍。现在我们来分析一下,app进程中是如何与这些进程进行交互,以及何时交互。Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer、Surface、SurfaceControlAndroid 图形架构 之四——图形缓冲区的申请和消费流程及核心类Android 图形架构 之五——深入分析原创 2020-10-16 15:42:33 · 3861 阅读 · 3 评论 -
Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类
前言Android应用的UI显示到Display的过程中,SurfaceFlinger扮演的角色只是“Flinger”,就是定于检查Layer更新,然后计算DirtyRegion,然后将结果推送给底层显示驱动进行显示。应用层把UI内容 写入到GraphicBuffer,SurfaceFlinger读取数据后 ,合成显示。BufferQueue 是用来管理GraphicBuffer的一、生产者消费者模型对GraphicBuffer的管理 使用的是生产者消费者模型,app 产生数据,通知SurfaceF原创 2020-10-13 16:04:44 · 7101 阅读 · 4 评论 -
Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl
前言上一篇我们分析了,app与SurfaceFlinger建立连接的过程,现在我们就可以继续往下分析,看下创建Surface的过程。我们可以将Surface理解为一个绘图表面,Android应用程序负责往这个绘图表面上填内容,而SurfaceFlinger服务负责将这个绘图表面的内容取出来,并且渲染在显示屏上。概述在Android中,Window与Surface一一对应。 如果说Window关心的是层次和布局,是从设计者角度定义的类,Surface则从实现角度出发,是工程师关系和考虑的类。Windo原创 2020-10-12 15:14:15 · 12203 阅读 · 3 评论 -
Android 图形架构 之二—— SurfaceFlinger 启动和连接
上一篇文章从全局来分析了Android 图形架构,本篇文章来分析SurfaceFlinger,surface的创建、图像的处理,管理设备的帧缓冲区等等,它是图像流的消费者,是本系列文章的核心SurfaceFlinger的启动过程启动概述SurfaceFlinger服务是一个独立进程。关于硬件方面的服务都在 frameworks/native/services/ 文件夹下,例如:audiomanager、powermanager、inputflinger、sensorservice、surfacefl原创 2020-10-09 16:19:50 · 6616 阅读 · 3 评论 -
Android 图形架构之一 ——概述
前言本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层。对分析app的卡顿,掉帧等 有很大帮助。由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个纵观全局的感觉,再看每个细节,就能心中有数。战略上把握好了,战术有点失误,也能不影响大局Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 创建和连接Android 图形架构 之三—— 创建SurfaceAndroid 图形架构 之四——图形缓冲区G原创 2020-09-29 18:54:02 · 7814 阅读 · 2 评论 -
ValueAnimator 源码深入分析
前言属性动画,大家应该都比较属性了,就是更改View的属性例如,宽,高,透明度等等。来实现动画效果的。那么他是如何实现的呢?又是如何保证动画从头开始执行呢?原创 2020-09-14 18:28:04 · 569 阅读 · 0 评论 -
Android 图形架构 之七——Choreographer 源码分析
前言在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作。其实UI显示的时候每一帧要完成的事情只有这三种。如下图是官网的相关说明:Choreographer接收显示系统的时间脉冲(垂直同步信号-VSync信号),在下一个frame渲染时控制执行这些操作。Choreographer中文翻译过来是"舞蹈指挥",字面上的意思就是优雅地指挥以上三个UI操作一起跳一支舞。这个词可以概括这原创 2020-09-09 16:53:25 · 3548 阅读 · 0 评论 -
ARouter 源码分析
一、前言在开始分析ARouter的源码之前,我假定你已经知道ARouter 的用途,并且会熟练使用。下面我在官方demo的基础上,来分析每项功能的流程。ARouter Github地址demo 中的 三个 Moduleapp demo项目的 主modulemodule-java demo项目的 子modulemodule-kotlin demo项目的 子module下面三个Module 提供了核心功能arouter-annotation 使用到的注解相关信息,例如:@Route,原创 2020-09-05 11:10:22 · 1099 阅读 · 0 评论 -
ConnectInterceptor 解析——OkHttp 源码详解(二)
RouteSelector 功能是用来选择Selection, 包含 Selection,Address,Selection 包含一系列的RouteAddress 一个对象对应一个UrlRoute 一个Url可能会对应多个IP地址(DNS负载均衡),每个socket 对应一个Route 对象......原创 2020-07-24 18:15:00 · 1163 阅读 · 0 评论 -
框架和流程——OkHttp 源码详解(一)
前言OkHttp应该是目前Android平台上使用最为广泛的开源网络库了,Android 在6.0之后也将内部的HttpUrlConnection的默认实现替换成了OkHttp。网上很多分析OkHttp的,都是在总体流程上,没有那么的细致,甚至有的同学看完了文章,认为OkHttp没有DNS解析。我说有,他说没有,我说有,他说没有,我说有,他说没有,我就站起来了,很快啊,年轻人,一、鸟瞰OkHttp下面的代码是一个很简单的例子,一步一步分析,起内部的工作原理 OkHttpClient client原创 2020-07-08 15:12:48 · 1970 阅读 · 0 评论 -
深入源码分析Handler 消息机制 、Looper、MessageQueue 消息同步屏障、IdleHandler、Message 复用
Handler 线程通信 基本使用在Android 中Handler来实现,大多数都是用来实现,子线程中发送消息,到主线程中更新UI,下面是基本使用 // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象 mHandler = new Handler(){ // 通过复写handlerMessage(),处理其他线程发来的消息...原创 2020-01-06 19:02:03 · 1711 阅读 · 0 评论