自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

薛瑄的博客

不论是技术还是生活,你遇到的每个困难,都是一次提升自己的机会。努力解决好每个困难,你将成为更优秀的自己

  • 博客(387)
  • 资源 (8)
  • 收藏
  • 关注

原创 Android 源码 分析

Android-UML-Diagramandroid 部分源码的流程图、时序图、类图,帮助更好的理解和记忆源码。项目中包括,流程图、时序图、类图、辅助理解的图片以及UML图源文件(可导入画图工具)。并不是每个源码分析都包含这些,例如:函数的分析没有类图说明:由于Android 源码很复杂,这些图表都是描述了一个大概的过程,为了快速理解源码,很多不是很重要的代码,在图表中省略了。也就是说

2018-02-02 10:03:05 984

原创 React Native 源码分析(五)—— Fabric创建View的过程

这篇文章详细分析一下,在React Native 新架构下,Fabric是如何创建View的,从React层发送把View信息到原生端开始分析。说明一点,React 层fiber的创建更新过程,不属于Fabric。其中Yoga的绘制过程不会太详细,只会给出大概流程,像布局缓存这些。文章的重点是帮你理解Fabric的整体流程。代码分析以断点截图方式体现,可以更方便查看运行的过程5、React Native 源码分析(五)—— Fabric创建View的过程。

2023-11-24 15:38:47 1049

原创 React Native 源码分析(四)—— TurboModules JSI通信机制

本文会详细分析React Native 新架构的TurboModules的通信过程,基于JSI的通信方式,除不会涉及Hemers引擎部分,其余代码都会详细分析,但比较简单的,不会很啰嗦,可以说是网上最完整详细的分析文章,代码通过断点截图,可以更方便查看运行的过程

2023-11-14 17:33:43 808

原创 深入分析动态链接的延迟绑定

深入分析动态链接原理

2023-06-27 18:02:28 481

原创 ELF文件结构和实战分析

ELF文件 实战分析

2023-06-12 20:01:26 1002 1

原创 开发npm第三方库的实战经验

开发npm第三方库

2022-11-15 20:48:34 955 1

原创 Linux内核——多任务内核程序head.s 源码详解

Linux 0.00 head.s

2022-11-04 15:16:02 191

原创 React Native 源码分析(三)——Native View创建流程(跨桥通信)

可以说是全网关于React Native 原生层View的创建流程 最详细的文章

2022-05-17 18:22:32 2061

原创 React Native Autolinking 源码深入分析

ReactNative autolink 源码深入分析,理解脚手架工作原理

2022-03-16 16:36:50 3664

原创 React Native 源码分析(二)—— Native Modules跨桥通信机制

本篇来分析一下,RN js和java的通信机制,在上一篇启动流程 看完后,通信的过程,你应该也能猜出个大概。具体过程,也是很简单1、React Native 源码分析(一)—— 启动流程2、React Native 源码分析(二)—— 通信机制3、React Native 源码分析(三)—— UI渲染流程4、React Native 源码分析(四)—— 任务调度5、React Native 源码分析(五)—— 事件分发一、 Java->JS 通信先来一张图,看一下通信的整体过程图片来源

2021-09-03 16:35:48 1383

原创 React Native 源码分析(一)——启动流程

本系列文章,是分析Android 的 React Native 的源码,主要包括以下文章,和以往的源码系列一样,分析主流程的代码,不会细致到每一行(但是比Gradle源码分析,要细致很多),会涉及到java、C++、js等源码。 RN版本是0.64.01、React Native 源码分析(一)—— 启动流程2、React Native 源码分析(二)—— 通信机制3、React Native 源码分析(三)—— UI渲染流程4、React Native 源码分析(四)—— 任务调度5、React

2021-08-23 20:19:21 3454

原创 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 1111 4

原创 Kotlin Coroutine 源码解析(1) —— 协程是如何运行的

前言在刚接触协程的时候,就产生了一个疑问,协程到底有没有创建线程,如果有,那它和线程池有什么区别?如果没有,为什么在android的主线程中不会 阻塞,了解Android源码的 应该猜到了,肯定是创建了子线程,不然 就会报异常了。那协程又是如何保证任务能切换到主线程呢? 下面就带着这几个问题,来分析协程的源码示例用下面的示例 模拟获取token,请求网络的过程。顺序执行,不会阻塞当前线程,fun main() { GlobalScope.launch { println("开始 ")

2021-01-27 18:53:41 1849 3

原创 缓存——RecyclerView源码详解(二)

前言这篇文章,继续RecycleView 的分析,来看看 从缓存获取View和 把View保存到缓存中缓存的相关都是交给 Recycler 类来处理的,包括存储缓存,获取缓存等。缓存的数据类型是ViewHold,它包含了itemView,mPosition 等Item的信息从缓存获取ViewHold先来了解Recycler中五个变量,每个变量都与缓存相关,按照缓存获取的顺序来逐一介绍一级缓存:返回布局和内容都都有效的ViewHolder按照position或者id进行匹配命中一级缓存无需o

2020-11-27 10:55:40 739

原创 整体流程、Measure、Layout 详解——RecyclerView源码详解(一)

前言整体流程、measure、layout 详解 ——深入分析RecyclerView源码(一)缓存 ——深入分析RecyclerView源码(二)滑动和动画 ——深入分析RecyclerView源码(二)本篇文章分析主体流程,先来整体看一下RecycleView的 结构图片来自RecycleView 是一个ViewGroup,想要显示数据集Datas,需要通过适配器Adapter,把数据转为对应的View,这样就可以添加到RecycleView中了。(适配器模式)由于屏幕能显示View

2020-11-11 17:25:36 1863 1

原创 Android 图形架构 之六——深入分析draw()是如何工作的

前言前面我们分析了 app进程中的 addView 的执行过程,其中涉及到了ViewRootImpl,WMS,Session,WindowState,Surface 等等,最后分析到performDraw() 函数,接下来,我们就继续来分析,带着两个问题,它是如何把数据写入生产者队列的,已经SurfaceFlinger 何时开始处理的?Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer

2020-10-19 17:09:49 2668

原创 Android 图形架构 之五—— 深入分析addView所发生的的一切

前言前几篇文章,分析了在SurfaceFlinger 进程,WMS进程 中,图形架构的流程和关键类的介绍。现在我们来分析一下,app进程中是如何与这些进程进行交互,以及何时交互。Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 启动和连接Android 图形架构 之三—— 创建Layer、Surface、SurfaceControlAndroid 图形架构 之四——图形缓冲区的申请和消费流程及核心类Android 图形架构 之五——深入分析

2020-10-16 15:42:33 3666 3

原创 Android 图形架构 之四——图形缓冲区的申请和消费流程及核心类

前言Android应用的UI显示到Display的过程中,SurfaceFlinger扮演的角色只是“Flinger”,就是定于检查Layer更新,然后计算DirtyRegion,然后将结果推送给底层显示驱动进行显示。应用层把UI内容 写入到GraphicBuffer,SurfaceFlinger读取数据后 ,合成显示。BufferQueue 是用来管理GraphicBuffer的一、生产者消费者模型对GraphicBuffer的管理 使用的是生产者消费者模型,app 产生数据,通知SurfaceF

2020-10-13 16:04:44 6774 4

原创 Android 图形架构 之三—— 创建Layer、Surface、SurfaceControl

前言上一篇我们分析了,app与SurfaceFlinger建立连接的过程,现在我们就可以继续往下分析,看下创建Surface的过程。我们可以将Surface理解为一个绘图表面,Android应用程序负责往这个绘图表面上填内容,而SurfaceFlinger服务负责将这个绘图表面的内容取出来,并且渲染在显示屏上。概述在Android中,Window与Surface一一对应。 如果说Window关心的是层次和布局,是从设计者角度定义的类,Surface则从实现角度出发,是工程师关系和考虑的类。Windo

2020-10-12 15:14:15 11586 3

原创 Android 图形架构 之二—— SurfaceFlinger 启动和连接

上一篇文章从全局来分析了Android 图形架构,本篇文章来分析SurfaceFlinger,surface的创建、图像的处理,管理设备的帧缓冲区等等,它是图像流的消费者,是本系列文章的核心SurfaceFlinger的启动过程启动概述SurfaceFlinger服务是一个独立进程。关于硬件方面的服务都在 frameworks/native/services/ 文件夹下,例如:audiomanager、powermanager、inputflinger、sensorservice、surfacefl

2020-10-09 16:19:50 6077 3

原创 Android 图形架构之一 ——概述

前言本系列的文章,可以让你明白,一个View最终是如何显示到屏幕上的,从应用层到硬件抽象层。对分析app的卡顿,掉帧等 有很大帮助。由于图形架构的涉及到的代码量很大,所以本篇先来个总体的概述,有个纵观全局的感觉,再看每个细节,就能心中有数。战略上把握好了,战术有点失误,也能不影响大局Android 图形架构 之一 ——概述Android 图形架构 之二—— SurfaceFlinger 创建和连接Android 图形架构 之三—— 创建SurfaceAndroid 图形架构 之四——图形缓冲区G

2020-09-29 18:54:02 7271 2

原创 ValueAnimator 源码深入分析

前言属性动画,大家应该都比较属性了,就是更改View的属性例如,宽,高,透明度等等。来实现动画效果的。那么他是如何实现的呢?又是如何保证动画从头开始执行呢?

2020-09-14 18:28:04 533

原创 Ubuntu 设置系统环境变量和开机自启动

Ubuntu系统环境变量详解参考这篇文章,讲的非常详细开机自启动在Linux下设置软件开机自动有三种方式:1、 自动启动应用程序——rc.local脚本 2、 自动启动服务——update-rc.d 3、 启动应用程序首选项 3、 使用Systemd 下面来逐一界面这三种方式:一、自动启动应用程序——rc.local脚本rc.local脚本是一个Ubuntu开机后...

2020-09-09 17:01:42 22239 3

原创 Android 图形架构 之七——Choreographer 源码分析

前言在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作。其实UI显示的时候每一帧要完成的事情只有这三种。如下图是官网的相关说明:Choreographer接收显示系统的时间脉冲(垂直同步信号-VSync信号),在下一个frame渲染时控制执行这些操作。Choreographer中文翻译过来是"舞蹈指挥",字面上的意思就是优雅地指挥以上三个UI操作一起跳一支舞。这个词可以概括这

2020-09-09 16:53:25 3412

原创 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 1044

原创 深入分析Glide源码

前言最近研究了一下Glide源码,发现很多地方写的真的很精妙,值得细细品味。Glide 功能丰富,图片三级缓存、可深度定制(继承AppGlideModule、LibraryGlideModule实现更多功能)、修改网络请求库、支持多种输入输出资源的转换(例如输入Stream,输出bitmap等等)、生命周期的管理虽然下面分析完了,整体的流程,但是想要真正领会设计思想,还需要好好沉淀一下。文章篇幅比较长,但逻辑并不复杂一、基本使用流程Glide最基本的使用流程就是下面这行代码,其它所有扩展的额外功能都

2020-08-01 17:43:42 5629 3

原创 ConnectInterceptor 解析——OkHttp 源码详解(二)

RouteSelector 功能是用来选择Selection, 包含 Selection,Address,Selection 包含一系列的RouteAddress 一个对象对应一个UrlRoute 一个Url可能会对应多个IP地址(DNS负载均衡),每个socket 对应一个Route 对象......

2020-07-24 18:15:00 1088

原创 框架和流程——OkHttp 源码详解(一)

前言OkHttp应该是目前Android平台上使用最为广泛的开源网络库了,Android 在6.0之后也将内部的HttpUrlConnection的默认实现替换成了OkHttp。网上很多分析OkHttp的,都是在总体流程上,没有那么的细致,甚至有的同学看完了文章,认为OkHttp没有DNS解析。我说有,他说没有,我说有,他说没有,我说有,他说没有,我就站起来了,很快啊,年轻人,一、鸟瞰OkHttp下面的代码是一个很简单的例子,一步一步分析,起内部的工作原理 OkHttpClient client

2020-07-08 15:12:48 1877

原创 引用其他project的module,根据参数自动配置依赖,repo管理多个 Project

前言在开发中遇到这样一个问题,在工作的project(以下简称Project A)中,用到了Fragmentation(以下简称Project B) 库的三个module,这个库是我在维护,平时更改库中的一些bug,需要先使用一段时间,再推到github,并发布到jcenter, 所以在我的工作项目中,是直接使用本地的代码,没有使用jcenter去引用它。这就遇到一个问题,在Project A 中改完 Project B的三个module,在等到发布的时候,就需要手动把代码拷贝一份到Project

2020-06-23 14:46:01 1521

原创 RxJava之七——RxJava 2.0 图文分析create()、 subscribe()、map()、observeOn()、subscribeOn()源码

Rxjava的使用流程,相信大家都很清楚了,就是以下面这个简单的demo,重点分析一下map()、observeOn()、subscribeOn()源码 Observable.create(object : ObservableOnSubscribe<Int> { override fun subscribe(emitter: ObservableEmitter<Int>) { }}) .map

2020-05-19 16:51:39 1640

原创 Android 微信 图片无法分享

最近在做微信分享的功能,图片分享,小程序分享,由于图片的原因,有的图片总是分享不出去。于是对这块进行了一些深入分析分析过程1、关于进程间通信经过查看log日志,发现已经调用了微信的WXEntryActivity,并且我的App Activity 已经paused,但是没有跳到微信的分享界面,Activity 会马上resumed。在log中看到这样的信息2020-03-31 17:43:...

2020-03-31 18:53:06 1359

原创 Android 仿微信表情雨 、红包雨 支持资源回收再利用

Github 项目:https://github.com/JantHsueh/EmojiRain表情雨 ViewGroup微信聊天中的表情雨效果一样。相比于其他项目的优点:本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅提供了丰富的自定义函数,可设置任意自己想要的效果先来看下效果,太阳雨。(gif有点卡顿,因为录制屏幕时的帧率不够...

2020-02-28 17:17:25 1538 1

原创 Github Actions 使用指南和Android 持续集成示例

前言Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。Github ActionsGithub Actions 提供了服务器(查看配置) ,来对代码进行打包发布等持续集成的...

2020-01-11 15:05:13 6511

原创 深入源码分析Handler 消息机制 、Looper、MessageQueue 消息同步屏障、IdleHandler、Message 复用

Handler 线程通信 基本使用在Android 中Handler来实现,大多数都是用来实现,子线程中发送消息,到主线程中更新UI,下面是基本使用 // 步骤1:在主线程中 通过匿名内部类 创建Handler类对象 mHandler = new Handler(){ // 通过复写handlerMessage(),处理其他线程发来的消息...

2020-01-06 19:02:03 1647

原创 parameter must be a descendant of this view 报错解决方案及Android 获取View焦点源码分析

前言最近的一系列源码分析,都是基于一个错误,逐步深入源码。都是网上没有源码分析的报错,这个报错也是。网络上有文章给出了有针对性的解决方案。我通过源码给出更普通的解决思路,这个问题,没有特定的解决方案,所以只能领会精髓后,随机应变。下面分析是通过一个具体问题,展开源码的分析,所以不必太在意业务场景的相似,重在领会精髓报错我的具体场景是,在从某一个界面跳转到登录界面时,点击输入框EditTe...

2020-01-04 15:42:13 7524

原创 Fragment has not been attached yet 解决方法及源码详解

前言在使用Fragment的时候,在内存重启的后,很容易出现一些难以预期的bug,下面将继续一边分析源码,一边看看这个bug是怎么产生的。这个报错的原因,可能和你的情况并不尽然相同。但是你可以通过对源码的理解,来加深对fragment的认识,从而能更优雅的解决问题。报错通俗的讲,就是在要使用Fragment 的 mHost 变量的时候,这个 变量为空。导致下面的报错2019-12-30 ...

2019-12-30 16:42:12 19162 2

原创 Fragment.setNextAnim(int) on a null object 解决方法及源码详解

前言相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了原因你自然知道如何解决。当让我也会给出解决方法。我的问题发生场景,可能和你的不太一样,我尽量从更普通...

2019-12-28 10:35:05 3125

原创 调用removeViewInternal、removeView 屏幕还是显示被删除界面 的解决方法和源码分析

这是在使用Fragmentation时遇到一个问题,在这个库中很多人都遇到这个问题。追求极致体验的我,只好对源码进行修改了。源码的问题,我已经修改了,会在近期开源出来。下面把这个问题的核心抽取出来,进行分析。问题:1、removeViewInternal 后,屏幕上还是显示那个被删除的布局界面2、虽然屏幕上显示那个被删除的布局界面,但是可以点击事件可以传递到后面的布局上。3、使用Layo...

2019-12-19 18:07:16 1936

原创 Android 在动画结束回调onAnimationEnd()中remove view的崩溃解决方法及源码分析

问题:问题描述起来很简单,就是在动画结束的时候,调用父view删除子view,出现崩溃,信息如下:java.lang.NullPointerExceptionAttempt to read from field 'int android.view.View.mViewFlags' on a null object reference android.view.ViewGroup.dispa...

2019-12-19 14:56:50 7788 2

原创 Android N 7.0 应用间共享文件(FileProvider)

Android N 之前的 Uri常规Uri有两种:媒体文件的Uri是content://, 表示这是一个数据库数据。去数据库查询正常返回。其他的文件Uri是file://, 表示这个是一个文件。这个uri是通过Uri.fromFile(File file)方法生成。Android N 之前,这些uri可以传递到其他应用。Android N 中共享文件Android

2019-12-09 10:15:25 125892 5

activity四种启动模式

activity四种启动模式,

2016-08-31

BadgeNumber 封装类

Android系统 应用图标显示未读消息数(BadgeNumber) 桌面app图标的角标显示,http://blog.csdn.net/xx326664162/article/details/51082574

2016-04-07

APP初始使用,半透明引导界面

APP初始使用,半透明引导界面

2016-03-30

APP初次使用,半透明引导界面

APP初次使用,半透明引导界面

2016-03-30

volley.jar

Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可以像AsyncHttpClient一样非常简单地进行HTTP通信,也可以像Universal-Image-Loader一样轻松加载网络上的图片。

2015-12-15

fastjson-1.1.46.android.jar

阿里巴巴 JSON解析jar包 fastjson,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser 更新时间 2015年10月 27日

2015-12-15

RationalRose2003使用手册.ppt

Rational_Rose_2003使用手册,软件使用的详细教程

2014-09-22

css2.0帮助文档

css2.0帮助文档,亲自用过,非常符合要求

2013-08-21

空空如也

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

TA关注的人

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