Android源码
文章平均质量分 93
爱海贼的小码农
做任何事,不要急躁,要慢慢沉淀自己。
展开
-
Android消息机制分析
Android消息机制分析Android的消息机制主要是指Handler的运行机制以及Handler所附带的MessageQueue和Looper的工作过程。这三者实际上是一个整体,只不过 我们在开发过程中比较多地接触到Handler而已。Handler的主要作用是将一个任务切换到某个指定的线程中去执行,那么Android为什么要提供这个功能呢? 或者说Android为什么需要提供在某个具体的线程中执行任务这种功能呢?这是因为Android规定访问UI只能在主线程中进行,如果在子线程中访问UI,那么程序就原创 2022-04-25 18:01:16 · 564 阅读 · 1 评论 -
MeasureSpec源码解读
今天来讲讲MeasureSpec吧。因为他与View的测量流程相关性很大,只有正确的理解了MeasureSpec的工作原理,我们才能更好的自定义View。那么MeasureSpec它的作用是什么呢?一般来说,它在很大程度上决定了一个View的尺寸规格。为什么是很大程度上呢?因为一个View的尺寸大小还可能和布局树中的父布局相关。想一想,如果你在你的子View中的布局参数写了match_parent,那么这个控件的大小是不是就和父布局相关了?所以说,我们今天的内容主要有以下两个方面,一个是MeasureSpe原创 2022-04-22 14:53:39 · 1886 阅读 · 1 评论 -
深入解析View的绘制源码流程
View的绘制流程今天来讲讲View的绘制流程吧,这一块也是我比较薄弱的地方,而且之前没有什么耐心去看这一块。今天就来学习这一块的知识点。主要分为3部分:View树的创建ViewRootImpl的创建真正的绘制流程开始performTraversalsView树的创建首先思考一个问题View的绘制从那里开始?关于这个问题我一开始也谷歌百度了很多东西,但是还是不能解决我的疑惑。所以今天我打算从根本上解决这个问题——从Activity的setContentView开始看。下面开始我的原创 2022-04-21 16:17:24 · 739 阅读 · 0 评论 -
Viewmodel源码解析
Viewmodel源码解析现在Viewmodel相信大家都比较熟悉了,adnroid的官网上也介绍了它的一些特性。具体的这里就不多讲了。今天就来讲解它的源码,讲解为什么它能够在配置发生变化的时候还能保存数据。现在在Activity和Fragment中怎么去初始化一个viewmodel呢?一般来讲就是通过谷歌给我们提供的扩展函数去初始化,具体如下val plantingsViewModel:PlantListViewModel by viewModels()所以今天,我就从这一个函数开始入手去看看V原创 2022-04-20 18:25:06 · 497 阅读 · 0 评论 -
BlockCanary源码解析
BlockCanary源码解析在讲解BlockCanary源码之前,我们还是需要将一些前置的知识点。本文不讲Handler的原理了,不太懂的同学自己去百度看一下吧。什么是卡顿在讲解卡顿问题之前,我们需要讲一下帧率这个概念。帧率是以帧称为单位的位图图像连续出现在显示器上的频率。我将一个例子,电影播放。电影其实就是很多张照片(帧)的一个集合,那为什么看起来是一个连续的过程呢?因为电影每一秒出现过的图片不止一张。实际上电影一般一秒出现的图片张数会在20-30张。假设电影一秒出现了24张图片,那么这个电影的帧原创 2022-03-24 17:43:41 · 2315 阅读 · 0 评论 -
LeakCanary源码分析
LeakCanary源码解析内存泄露今天来讲解一下老生常谈的问题了,内存泄露以及讲解LeakCanary是如果检测内存泄露的。大家都在讲内存泄露,那么内存泄露的最根本的原因是什么?**最根本的原因就是该回收的对象没有被即使回收掉,导致了内存泄露。**要理解这句话,就要对java的垃圾回收机制有一定的了解了。什么是垃圾回收呢?就是java虚拟机在运行的时候会触发垃圾回收的机制,将那些没有用的,占用内存的对象回收掉。java虚拟机是怎么判断这个对象有没有用呢?是根据GC ROOT的可达性算法去判断的。就是原创 2022-03-23 18:17:43 · 2749 阅读 · 0 评论 -
Glide的缓存源码分析
Glide的缓存流程上一篇讲解了Glide的整体流程,其实很多时候,只有第一次加载图片的时候,我们才会按照那一个流程去走。因为很多时候,我们都是有缓存了。有了缓存之后,加载流程就会稍微变一下了。那么今天,我们就来讲解一下Glide中的缓存。在讲解Glide缓存之后,我建议大家先去了解一下LinkedHashMap的实现。因为这里涉及到LRU算法。推荐大家一篇关于LinkedHashMap的博客:田小波关于LinkedHashMap的源码分析先来一张Glide缓存的流程图吧,让大家对Glide的流程有一个原创 2022-03-22 14:21:31 · 2316 阅读 · 0 评论 -
Glide源码分析之Glide的整体加载流程
大家应该都听说过Glide图片加载库,或多或少都知道怎么去使用Glide去加载一张图片。Glide对于使用者来说是非常友好的一个库。那么今天我们就来学习Glide的源码,网上也有很有优秀的博客讲解Glide的源码的,现在我们一起来学习Glide的源码。这个优秀的框架是怎么帮助我们实现图片的加载和显示的。很多人看源码都不知道从哪里下手。这篇博客也分享一下我平时是怎么看源码的。这是基于Glide:4.10版本的源码分析 首先我们平时是怎么使用Glide的?Glide.with(context).loa原创 2022-03-15 17:33:13 · 898 阅读 · 0 评论 -
从源码角度去理解Context
Android中的各种ContextContext家族之间的关系看以上这幅图,我们知道各个Context之间的关系。 首先Context是一个抽象类,它的实现由两个一个是ContextImpl,它是真是实现了Context里面的各种方法。ContextWrapper里面持有一个ContextImpl变量——mBase,调用ContextWrapper的实现方法,最终都是通过mBase去调用ContextImpl的实现方法。这里用的设计模式是装饰模式,ContextWrapper是装饰类。Conte原创 2022-01-19 14:30:30 · 391 阅读 · 0 评论 -
Android面试之Activity的启动流程详解
根Activity的启动过程根Activity的启动整体过程如下:主要分为四部分Launcher请求ATMS创建根ActivityATMS会去请求zygote创建应用程序进程zygote去创建应用程序进程ATMS请求ApplicationThread创建根Activity我们分析的话,不会按照上面的每一个步骤去分析。我们会按照下面三个部分去进行源码(android 10)的分析Launcher请求ATMS的过程ATMS到ApplicationThread的调用过程Activity原创 2022-01-13 18:51:57 · 2340 阅读 · 0 评论