
源码分析
文章平均质量分 97
neuHenry
一个还没有入门的程序员!!!
展开
-
深入剖析 Android 开源库 EventBus 的源码详解
在 Android 项目开发的时候,经常会遇到组件与组件之间、组件与后台线程之间的通信, 比如:子线程中进行数据请求,请求数据成功后,通过 Handler、RxJava 等来通知 UI 主线程进行更新操作;两个 Fragment 之间可以通过 Listener 进行通信,简单的通信通过上述的技术手段也是可以满足需求的,但随着项目的不断迭代更新,程序越来越庞大时,就会要写很多的代码,从而导致代码严重的耦合问题。为了优化该问题,EventBus 事件总线应运而生。原创 2024-07-15 01:43:52 · 1372 阅读 · 0 评论 -
深入剖析 Android 网络开源库 Retrofit 的源码详解
在 Android 开发中,通过网络请求获取服务端数据是一项基本且常见的需求。目前有多种网络请求框架可供选择,其中 Android-Async-Http、Volley、OkHttp 和 Retrofit 是较为流行的、开源的网络请求框架。如何选择它们?孰优孰劣?仁者见仁智者见智,我个人觉得适合的就是最好的,不要盲目跟风去更换掉之前选用的网络请求框架,毕竟老代码那是牵一发而动全身哈!对于新项目来说,选择一个好用的网络请求框架,还是很有必要的,而 Retrofit 作为当下最火的一个网络开源请求库,很值得学习!原创 2024-06-27 23:57:40 · 1759 阅读 · 1 评论 -
路由框架 ARouter 原理及源码解析
在日常开发中,随着项目业务越来越复杂,项目中的代码量也越来越多,如何维护、扩展、解耦等成了一个非常头疼问题。为解决此问题而衍生出的诸如:插件化、组件化、模块化等热门技术。 使用组件化来改造项目时的难点,就是实现各个组件之间的通讯,通常解决方案采用路由中间件,来实现页面之间的跳转关系。本文要解析的 ARouter路由框架就是众多解决方案中比较优秀的一个开源库,并且是国人团队开发的,所以中文文档非常详细,以便使用者快速接入。原创 2024-06-19 10:35:31 · 1390 阅读 · 0 评论 -
深入Android S (12.0) 探索Framework之输入子系统InputDispatcher的流程
Android的输入子系统InputReader在一次线程循环中,通过getEvent函数尽可能多地读取设备增删与原始输入事件,并将它们封装成RawEvent结构体。然后通过其processEventsLocked函数对获取事件进行分类处理,将原始输入事件进行转译、封装与加工后将结果暂存到mQueuedListener中。最后将所有暂存、已加工过的输入事件交付给 InputDispatcher来进行分发。本篇将深入探索InputDispatcher的工作流程,它是如何来分发这些输入事件的?原创 2024-06-14 18:52:38 · 822 阅读 · 0 评论 -
Android 常用开源库 MMKV 源码分析与理解
谈到轻量级的数据持久化,在 Android 开发过程中,大家首先想到的应该就是 SharedPreferences(以下简称 SP),其存储数据是以 key-value 键值对的形式保存在 data/data/\/shared_prefs 路径下的 xml 文件中,使用 I/O 流 进行文件的读写。通常用来保存应用中的一些简单的配置信息,如用户名、密码、自定义参数的设置等。原创 2024-06-05 23:52:04 · 1733 阅读 · 0 评论 -
Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault
上一篇文章解释了什么是mmap内存映射及其在Linux内核中的实现原理,然后深入到源码中一步一步分析mmap在内核中的源码实现。mmap内存映射的核心就是在进程虚拟内存空间中为该次映射分配一段虚拟内存出来,然后将这段虚拟内存与磁盘文件建立映射关系。但此时内核并不会为映射分配物理内存,物理内存的分配工作需要延后到这段虚拟内存被CPU访问的时候,通过缺页中断来进入内核来分配物理内存,并在页表中建立好映射关系。那么,接下来就跟随笔者一步步深入源码,查看内核是如何分配物理内存并建立虚拟内存与物理内存之间映射关系的?原创 2024-06-03 21:15:05 · 1924 阅读 · 0 评论 -
Linux 内核之 mmap 内存映射的原理及源码解析
mmap 的全称是 memory map,中文意思是内存映射或地址映射,是 Linux 操作系统中的一种系统调用,其作用是将一个文件或者其它对象映射到进程的虚拟地址空间,实现磁盘地址和进程虚拟地址空间一段虚拟地址的一一对应关系。通过 mmap 系统调用我们可以让进程之间通过映射到同一个普通文件实现共享内存,普通文件被映射到进程虚拟地址空间当中后,进程可以像访问普通内存一样对文件进行一系列操作,而不需要通过 I/O 系统调用来读取或写入。原创 2024-05-22 08:00:00 · 3244 阅读 · 0 评论 -
深入Android S (12.0) 探索Framework之输入子系统InputReader的流程
上一篇文章深入探索了 Android Framework 的输入系统 IMS 的构成与启动,对 IMS 的重要成员有了初步的理解,然后通过源码对 IMS 的整个启动流程进行分析,在 IMS 启动并准备就绪后,输入系统就可以从设备节点源源不断的抽取输入事件,并交给事件处理者进行加工处理,即输入子系统 InputReader。本篇将深入探索 InputReader 的工作流程,它是如何从设备节点将输入事件交给 InputDispatcher 的派发的?原创 2024-01-19 19:30:29 · 1149 阅读 · 0 评论 -
深入Android S (12.0) 探索Framework之输入系统IMS的构成与启动
Android 输入系统(Input System)的工作原理,包括:输入设备的管理、输入事件的加工方式及派发流程。首先输入设备包括:触摸屏,键盘,鼠标和手柄等,其中触摸屏与键盘是 Android 最普遍也是最标准的输入设备。当用户操作输入设备时,Linux内核接收到相应的硬件中断,然后将中断加工成原始的输入事件数据并写入其对应的设备节点中,在用户空间可以通过输入系统内部的读取函数将原始事件数据读出,并进行一系列翻译加工成Android输入事件,然后在所有的窗口寻找合适的事件接收者,并派发给它来消费该事件原创 2023-11-28 16:28:28 · 1685 阅读 · 0 评论 -
深入Android S(12.0)探索Framework之SystemServer进程的启动详解
SystemServer 作为 Zygote 进程 fork 出的第一个进程,其进程名为:system_server。其承载着整个 Framework 的核心服务,如创建并启动 ActivityManagerService、PackageManagerService、WindowManagerService、InputManagerService 等 90 多个核心系统服务。接下来一起深入学习一下 SystemServer 进程的创建与启动流程。原创 2023-11-14 23:27:11 · 823 阅读 · 0 评论 -
深度详解 Android R(11.0)Service 启动过程
服务 (Service) 是 Android 系统中 4 大应用程序组件之一,主要用途有:后台运行和跨进程访问。通过启动服务可以在不显示界面的前提下在后台执行那些不需要和用户交互且长期运行的任务,即使程序切换到后台,或者用户打开了另一个应用程序,服务仍然能够保持独立运行。通过 AIDL 服务可以实现不同进程之间的数据通信,后面详细解析。Service 的存在形式:本地服务、远程服务和前台服务。Service 的状态:启动状态和绑定状态,也可以说成是服务的两种启动方式。.........原创 2022-08-03 00:35:26 · 2665 阅读 · 1 评论 -
深度详解 Android 之 Context
在 Android 开发中、亦或是面试中都离不开四大组件的身影,而在创建或启动这些组件时,并不能直接通过 new 关键字后跟类名来创建实例对象,而是需要有它们各自的上下文环境,也就是本篇文章要讨论的 Context。Context 提供了关于应用环境全局信息的接口。它是一个抽象类,它的执行被 Android 系统所提供。它允许获取以应用为特征的资源和类型,是一个统领一些资源(应用程序环境变量等)的上下文。............原创 2022-07-18 22:19:56 · 8569 阅读 · 0 评论 -
深度详解 View.post() 为何能够获取到 View 的宽高值?
在文章中通过分析源码解析了获取不到 View 宽高值的原因,在文章结尾处留了一个问题,是打算后面继续分析解读的,但是却给忘了,欠下的总归是要弥补的,因此这里来补上,本文就来深度详解 View.post() 为何能够获取到 View 的宽高值?...............原创 2022-07-10 14:53:35 · 2086 阅读 · 7 评论 -
深度详解 Android S(12.0)屏幕刷新机制之 Choreographer
Android 的 UI 渲染性能是 Google 工程师们长期以来非常重视的,随着 Android 系统的不断演进和完善,Google 在 2012 年的 I/O 大会上宣布 Project Butter 计划,并在 Android 4.1 中正式开始实施,以优化 UI 渲染流畅性的问题。Project Butter 对 Android Display 系统进行了重构优化,引入了三个核心元素,即 VSYNC、Triple Buffering 和 Choreographer。..............原创 2022-06-30 23:22:35 · 5517 阅读 · 1 评论 -
深度详解 Android R(11.0)Activity 启动过程
文章目录前言一、Launcher进程请求ATMS1. Launcher 桌面的 App 图标入口2. Launcher ## startActivitySafely() 方法二、ATMS发送创建应用进程请求三、Zygote进程接受请求并孵化应用进程四、应用进程启动ActivityThread1.引入库2.读入数据总结前言面试中经常会被问到,让面试者简述一下 Activity 的启动流程,这个问题是考察面试者对源码的理解程度,要征服面试官获得满意的 offer 还是需要一步步深入去探索一下源码,梳理启动原创 2022-05-22 23:43:32 · 5954 阅读 · 4 评论 -
深度解析源码 onCreate() 和 onResume() 中获取不到View的宽高值?
首先,提出一个问题,下面三处打印输出的结果是什么呢?带着问题思考一下,然后猜测一下输出结果,之后我们再带着问题去探寻源码;public class MyActivity extends Activity { private static final String TAG = MyActivity.class.getSimpleName(); private Button mButton; @Override public void onCreate(Bundle sa原创 2020-06-26 21:00:16 · 1510 阅读 · 1 评论 -
分析Handler之同步屏障机制与Android的屏幕刷新机制在源码中的应用
说到Handler的消息机制,相信大家谈起这个的时候,多多少少都会有所了解,甚至会说到,还比较熟悉吧!那笔者也自信一把,算是比较熟悉!!!但是笔者在跟踪学习View的invalidate()、requestLayout()方法的源码时,总是会遇到这样一段不甚知晓的代码: @UnsupportedAppUsage void scheduleTraversals() { if (!mTraversalScheduled) { mTraversalSche原创 2020-06-17 21:19:03 · 1140 阅读 · 1 评论 -
View的requestLayout()方法的源码分析
首先来看一下requestLayout()方法是做什么的?View#requestLayout(): /** * Call this when something has changed which has invalidated the * layout of this view. This will schedule a layout pass of the view * tree. This should not be called while the view原创 2020-06-15 02:29:44 · 1141 阅读 · 0 评论