Mark Xu 的博客

记录精彩的程序人生
源码分析 0 篇文章

ViewStub 源码分析

写项目的过程中发现,在需要根据适当条件进行相应 UI 展示时,代码中充斥了 setVisibility 相关的代码,相当混乱。我们可以使用 ViewStub 来简化相应的逻辑,并且 ViewStub 大小为 0,运行时才进行懒加载,所以性能上也有一定优势。本文对 ViewStub 的源码进行分析,以使用的更得心应手!简单使用 ViewStub 的使用很简单,在布局文件中像引入其他控件一样引入 ViewStub:<ViewStu

Dagger2 学习总结及源码浅析

Dagger2 是一个解决 Android 或 Java 的依赖注入类库,关于 Dagger2 的教程网上已经很多了,此处推荐《Dagger2 入门, 以初学者角度》和《Android:dagger2 让你爱不释手 - 基础依赖注入框架篇》这两篇,对照教程可以基本学会使用方法。本文算是我自己在学习 Dagger2 过程中的一个精华汇总吧,同时外加实现源码分析。学习总结总览 1、Java 中万物皆对象,每一个对象可以拥有很多成员变量

ButterKnife 源码分析

ButterKnife 框架是我们日常使用最频繁的框架之一,本文对 ButterKnife8.8.1 版本进行源码分析。整体流程编写代码时对目标元素进行注解编译时注解处理器会扫描注解,并通过 JavaPoet 自动生成 Java 文件调用 ButterKnife.bind() 方法时,会通过反射拿到之前为目标类生成的 TargetClassName_ViewBinding 类,并调用其构造方法,完成绑定具体分析源码组成 B

Retrofit 使用总结及源码分析

本篇文章对 Retrofit 用法进行简单记录,并进行相关的源码分析。整体说明 Retrofit 对网络请求接口进行了封装,实际执行网络请求的依然是 OkHttp。Retrofit 接口层实际是对 OkHttp 中 Request 的封装,采用注解的形式来描述网络请求参数。Retrofit 使用在学习 Retrofit 使用之前我们先回顾下 OKHttp 的工作方式,一个标准的 OkHttp 请求格式为 mClient.newCall

OkHttp3 源码分析(一)

本篇文章对 OkHttp3 的源码进行分析,学习其设计思想。OkHttpClient 首先从 OkHttpClient 的构建说起。由官方文档可知,在绝大多数 App 中,我们都应该只拥有一个 OkHttpClient 对象,这样所有的 Http 请求可以共用 Response 缓存、共用线程池以及共用连接池,达到节省延迟和内存的目的。关于 OkHttpClient 我们暂时只关注两点:Builder 模式和 Call 接口。Buil

View 三大流程源码分析

View 是 Android 应用开发中相当重要的角色,重要程度丝毫不亚于四大组件,甚至远高于 Broadcast 和 ContentProvider。本文为学习《Android 开发艺术探索》中 View 的工作原理后,自己对于 View 的三大流程的源码分析。ViewRootView 的绘制流程从 ViewRoot 的 performTraversals 方法开始,经过 measure、layout 和 draw 将一个 View 绘制出

Binder 原理分析

Binder 是 Android 中非常重要的机制,本篇文章从 AIDL 入手分析 Binder 的原理,主要是进行宏观上的理解,暂不纠结细节及底层源码。# 动态可加载内核模块机制 Linux 动态可加载内核模块机制:模块是具有独立功能的程序,它可以被单独编译,但不能独立运行。它在运行时被链接到内核作为内核的一部分在内核空间运行。在 Android 中,通过添加 Binder 驱动这个模块运行在内核空间,负责各个用户进程通过 B

Android 事件分发机制源码分析(二)按键事件

本篇文章主要分析应用层在接收到按键事件后的分发流程,对于 Framework 层获得按键事件、分发传递给应用层等相关知识,在后期 Framework 层源码学习时再做分析。项目中只要在 Activity 中重写 dispatchKeyEvent() 方法,就可以进行事件处理和拦截了,那我们从 Activity 类的 dispatchKeyEvent() 方法看起:分发顺序在分发的任何一步有分发者进行消费,即返回 true 时,

Android 事件分发机制源码分析(一)触摸事件

最近的工作需要对 Android 按键事件分发进行处理,而自己对于 Android 事件分发机制的理解并不是很透彻。因此周末对 Android 触摸事件分发机制进行源码分析、总结,下周对按键事件进行分析、总结。触摸事件分发机制的原则事件在从 Activity 向下传递的过程中,可以被拦截,并被拦截者使用、消费如果事件被消费,就意味着事件信息传递终止当前分发者决定不拦截事件时,无法使用事件,只能继续向下进行分发事件回

EventBus 3.0 源码分析(二)注解处理器的使用

上一篇文章对 EventBus 进行了整体的源码分析,看到 EventBus3.0 获取订阅事件的注解信息共有两种方式,分别是通过 EventBusAnnotationProcessor 注解处理器和运行时通过反射获取,本文主要对这两种方式进行源码分析,并对编译时注解和运行时注解进行拓展学习。在 EventBus 的 findSubscriberMethods 方法中可以看到:List<SubscriberMethod

EventBus 3.0 源码分析(一)整体分析

EventBus 是 Android 平台非常优秀的事件总线开源库,来自于德国的 greenrobot 团队,该团队旗下还有大名鼎鼎的 greenDAO。EventBus 足够快速、轻量,安装量超过 100,000,000+!足以看出其热门程度。本文是我对 EventBus3.0 的源码分析,源码分析经验不足,如有错误,还请指出。观察者模式本段引自图说设计模式模式动机建立一种对象与对象之间的依赖关系,一个对象发生改变时

AsyncTask 源码分析

关于 Android 源码分析,引用郭霖老师博客的一段话:简单概括就是八个字:抽丝剥茧、点到即止。应该认准一个功能点,然后去分析这个功能点是如何实现的。但只要去追寻主体的实现逻辑即可,千万不要试图去搞懂每一行代码都是什么意思,那样很容易会陷入到思维黑洞当中,而且越陷越深。因为这些庞大的系统都不是由一个人写出来的,每一行代码都想搞明白,就会感觉自己是在盲人摸象,永远也研究不透。如果只是去分析主体的实现逻辑

Android 消息机制源码分析

这个月的计划是拿下 Android 开发中的多线程,在复习了 java 多线程基础知识后,开始啃 Android 的消息机制,由于平时使用挺多的了,所以这次尝试从源码入手,加深理解。感谢各位前辈的分享!一句话总结:Looper 不断从 MessageQueue 中取出一个 Message,然后交给其对应的 Handler 处理。先上一幅整体关系图,来自郭神 Handler 处理 Message 将某个 Message 压入 Messag