自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

薛瑄的博客

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

原创 Android 源码 分析

Android-UML-Diagram android 部分源码的流程图、时序图、类图,帮助更好的理解和记忆源码。 项目中包括,流程图、时序图、类图、辅助理解的图片以及UML图源文件(可导入画图工具)。并不是每个源码分析都包含这些,例如:函数的分析没有类图 说明:由于Android 源码很复...

2018-02-02 10:03:05 693 0

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

前言 这篇文章,继续RecycleView 的分析,来看看 从缓存获取View和 把View保存到缓存中 缓存的相关都是交给 Recycler 类来处理的,包括存储缓存,获取缓存等。缓存的数据类型是ViewHold,它包含了itemView,mPosition 等Item的信息 从缓存获取Vie...

2020-11-27 10:55:40 41 0

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

前言 整体流程、measure、layout 详解 ——深入分析RecyclerView源码(一) 缓存 ——深入分析RecyclerView源码(二) 滑动和动画 ——深入分析RecyclerView源码(二) 本篇文章分析主体流程,先来整体看一下RecycleView的 结构 图片来自 ...

2020-11-11 17:25:36 94 0

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

前言 前面我们分析了 app进程中的 addView 的执行过程,其中涉及到了ViewRootImpl,WMS,Session,WindowState,Surface 等等,最后分析到performDraw() 函数,接下来,我们就继续来分析,带着两个问题,它是如何把数据写入生产者队列的,已经Su...

2020-10-19 17:09:49 159 0

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

前言 前几篇文章,分析了在SurfaceFlinger 进程,WMS进程 中,图形架构的流程和关键类的介绍。现在我们来分析一下,app进程中是如何与这些进程进行交互,以及何时交互。 Android 图形架构 之一 ——概述 Android 图形架构 之二—— SurfaceFlinger 启动和连...

2020-10-16 15:42:33 195 1

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

前言 Android应用的UI显示到Display的过程中,SurfaceFlinger扮演的角色只是“Flinger”,就是定于检查Layer更新,然后计算DirtyRegion,然后将结果推送给底层显示驱动进行显示。 应用层把UI内容 写入到GraphicBuffer,SurfaceFling...

2020-10-13 16:04:44 1690 3

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

前言 上一篇我们分析了,app与SurfaceFlinger建立连接的过程,现在我们就可以继续往下分析,看下创建Surface的过程。 我们可以将Surface理解为一个绘图表面,Android应用程序负责往这个绘图表面上填内容,而SurfaceFlinger服务负责将这个绘图表面的内容取出来,并...

2020-10-12 15:14:15 364 1

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

上一篇文章从全局来分析了Android 图形架构,本篇文章来分析SurfaceFlinger,surface的创建、图像的处理,管理设备的帧缓冲区等等,它是图像流的消费者,是本系列文章的核心 SurfaceFlinger的启动过程 启动概述 SurfaceFlinger服务是一个独立进程。 关于硬...

2020-10-09 16:19:50 257 0

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

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

2020-09-29 18:54:02 335 0

原创 ValueAnimator 源码深入分析

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

2020-09-14 18:28:04 49 0

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

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

2020-09-09 17:01:42 12771 1

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

前言 在Android4.1之后增加了Choreographer机制,用于同Vsync机制配合,控制同步处理输入(Input)、动画(Animation)、绘制(Draw)三个UI操作。其实UI显示的时候每一帧要完成的事情只有这三种。如下图是官网的相关说明: Choreographer接收显示系统...

2020-09-09 16:53:25 874 0

原创 ARouter 源码分析

一、前言 在开始分析ARouter的源码之前,我假定你已经知道ARouter 的用途,并且会熟练使用。下面我在官方demo的基础上,来分析每项功能的流程。 ARouter Github地址 demo 中的 三个 Module app demo项目的 主module module-java d...

2020-09-05 11:10:22 150 0

原创 深入分析Glide源码

前言 最近研究了一下Glide源码,发现很多地方写的真的很精妙,值得细细品味。Glide 功能丰富,图片三级缓存、可深度定制(继承AppGlideModule、LibraryGlideModule实现更多功能)、修改网络请求库、支持多种输入输出资源的转换(例如输入Stream,输出bitmap等等...

2020-08-01 17:43:42 437 2

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

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

2020-07-24 18:15:00 155 0

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

前言 OkHttp应该是目前Android平台上使用最为广泛的开源网络库了,Android 在6.0之后也将内部的HttpUrlConnection的默认实现替换成了OkHttp。 网上很多分析OkHttp的,都是在总体流程上,没有那么的细致,甚至有的同学看完了文章,认为OkHttp没有DNS解析...

2020-07-08 15:12:48 404 0

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

前言 在开发中遇到这样一个问题,在工作的project(以下简称Project A)中,用到了Fragmentation(以下简称Project B) 库的三个module,这个库是我在维护,平时更改库中的一些bug,需要先使用一段时间,再推到github,并发布到jcenter, 所以在我的工...

2020-06-23 14:46:01 638 0

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

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

2020-05-19 16:51:39 480 0

原创 Android 微信 图片无法分享

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

2020-03-31 18:53:06 466 0

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

Github 项目:https://github.com/JantHsueh/EmojiRain 表情雨 ViewGroup 微信聊天中的表情雨效果一样。 相比于其他项目的优点: 本项目使用了资源缓存复用机制,在无限循环中,不会出现占用内存增长的问题,所以不会GC(除非),更流畅 提供了丰富的自...

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

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

前言 Github Actions 官方文档对很多细节都进行了详细说明,但是如果你是第一次接触,看了很多关于细节的东西,不知所云,导致很快忘记。本篇文章,从我项目的代码,从总体上,认识一下Actions。文章最后,我会把我在自定义action的过程中遇到一些细节问题的解决方法。 Github Ac...

2020-01-11 15:05:13 4277 0

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

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

2020-01-06 19:02:03 1084 0

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

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

2020-01-04 15:42:13 1346 0

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

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

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

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

前言 相信遇到这个问题的小伙伴,一定很无奈,要想知道这个问题的原因,并根治这个问题,需要研究fragment系列的大部分源码。网上很多文章,只是简单描述了这个问题如何出现(使用的方法很麻烦,下面我回介绍一种更容易去重现这个问题的方法),我在这里从源码的角度,详细分析一下,这个问题出现的原因,知道了...

2019-12-28 10:35:05 1530 0

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

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

2019-12-19 18:07:16 806 0

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

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

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

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

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

2019-12-09 10:15:25 59614 4

原创 Android View 的scroll相关方法属性 以及Scroller弹性滑动原理

最近在修改fragmentation 的bug时,其中SwipeBackLayout 的实现使用是ViewDragHelper ,而ViewDragHelper 使用的是OverScroller,OverScroller 在大部分时候是可以取代Scroller的。所以先从Scroller来分析,这...

2019-12-06 17:57:16 207 0

原创 安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例

问题 安装完APP后,点击“打开”按钮,打开APP。回到桌面,点击桌面icon打开APP,出现多个app实例 How to prevent multiple instances of an Activity when it is launched with different Intents ...

2019-11-04 20:25:27 639 0

原创 修改ButterKnife bug的实战经验

前言 不得不说ButterKnife是一个很有学习价值的项目。我从学习源码,修改bug后,最后pull request,学到了很多东西。如果你对Butterknife 源码还不了解,建议先看一下这篇文章。本文章不介绍基础的源码流程,主要是深入一部分代码,分享一些我在调试bug,修改bug的经验。 ...

2019-08-01 18:49:34 417 0

原创 Android字节码插桩——详细讲解 附带Demo

参考: Android字节码插桩采坑笔记 通过自定义 Gradle 插件修改编译后的 class 文件 ASM官方文档

2019-07-17 10:00:25 2619 0

原创 自定义Gradle plugin 、Java AnnotationProcessor 和 Kotlin Kapt 断点调试

前言 首先我们先对调试器进行一些简单的了解,在去介绍 调试注解处理器AnnotationProcessor就会清晰明了,懂了原理,操作基本就是一次学会 调试器 手动attach调试器 平时在使用AS debug APP的时候,调试器会自动attach到app的进程。 其实我们也可以手动把调试器...

2019-06-12 11:17:01 1635 0

原创 LiveData 使用与源码分析——完全搞懂LiveData原理

一、LiveData简介 LiveData是google官方架构JetPack系列的一个响应式开发框架,LiveData是一个可以被观察的数据持有者类。说到响应式开发或者说观察者就不免想到RxJava,RxJava将观察者模式运用的炉火纯青。但LiveData和RxJava的定位是不一样的,Liv...

2019-06-04 16:41:05 4307 1

原创 Lifecycle 使用与源码分析——彻底搞懂Lifecycle原理

一、Lifecycle 介绍 Lifecycle是一个生命周期感知组件,一般用来响应Activity、Fragment等组件的生命周期变化,并将变化通知到已注册的观察者。有助于更好地组织代码,让代码逻辑符合生命周期规范,减少内存泄漏,增强稳定性。 这些组件可帮助您生成更易于组织且通常更轻量级的代码...

2019-06-03 15:50:36 4297 3

原创 TextView 在xml 中设置图片大小

TextView xml中只能设置图片的位置,但是不能再xml中设置图片的大小 android:drawableStart="@drawable/pic" 在代码中可以啊对textview 的图片进行设置,主要代码如下: //设置图片的上下左右的位置,也就是宽高 drawa...

2019-05-30 18:39:48 2887 0

原创 InputFilter 和inputType属性 ——Edittext(二)

简介 Android开发中,输入框Edittext,经常会遇到控制输入类型,比如只输入数字,十进制,输入金额(两位小数 )等等。 Edittext inputType属性提供了一些规则,可以满足大部分的需求 InputFilter 可以自定义更复杂的输入规则 一、 inputType ...

2019-05-25 17:40:47 787 0

原创 Android7.0 网络安全配置、自定义okhttp证书 ——解决HTTPs 抓包问题

工具类 下面是工具类,只需要传入OkHttpClient.Builder对象,在使用中传入this 和自定义证书的路径(assets 资源下面的路径) /** * @Author: xuexuan: 2019年5月24日19:49:10 * @Description:设置okhttp 自定义证...

2019-05-24 19:56:37 1386 0

原创 Fragment 源码浅析——Fragment(三)

与 Fragment 相关的类 我们平时使用fragment的时候都是通过创建事务,来操作fragment, getSupportFragmentManager() .beginTransaction() .add(R.id.container, new M...

2019-05-24 17:43:55 458 0

原创 类加载器与双亲委派模型

类加载器 加载类的开放性 类加载器(ClassLoader)是Java语言的一项创新,也是Java流行的一个重要原因。在类加载的第一阶段“加载”过程中,需要通过一个类的全限定名来获取定义此类的二进制字节流,完成这个动作的代码块就是类加载器。这一动作是放在Java虚拟机外部去实现的,以便让应用程序自...

2019-04-18 12:01:00 349 0

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