ScrollView 实现指北

在这之前,好几次想了解 ScrollView 实现,粗略翻翻,每次都没抓到要点;又实在没有非常迫切的需求,也就没有花太多心思了。最近工作上有个任务需要类似 ScrollView 的实现,只得下功夫研究一翻,于是有了这篇小短文。

首先要澄清的是,我不打算去分析 ScrollView 的源码,我们的目的只是为了弄清楚他最根本的实现方式。另外,涉及 View 的绘制时,也仅仅当他是一个黑盒,我们将会了解到如何使用 View 提供的 API 来实现自己的 scroll view。

阅读全文

如何使用 Java 和 double-check 实现支持多实例的单例

考虑这样一个需求,我们有两个业务 A 和 B,他们共同使用一个硬盘缓存 DiskCache 的实现。由于在单个业务内只需要一份缓存,这很容易让我们想到单例模式。在本篇文章中,我们从最简单的传统的单例模式的实现开始,一步步实现一个优雅高效的多实例的单例模式。

阅读全文

Android native 崩溃信息捕获实践

本篇是 bugly 一篇关于 native crash 捕获的文章的练习。由于他文章中已经给出了相关的大部分知识点,这里我就仅仅补充一些细节,并给出一个完整的 demo。

阅读全文

Android P 源码分析 5 - Low memory killer 之 lmkd 守护进程

lmkd 是在应用层实现的取代原有 lowmemorykiller 驱动的守护进程。通过监听 memory pressure 事件,lmkd 可以在内存 low、medium 和 critical 的时候得到通知,进而回收优先级比较低的进程

阅读全文

Android P 源码分析 4 - logd 的初始化

为了跟老罗的书保持一个比较一致的步伐,这一篇开始我们来看 logd 的实现。当然,这个 logd 不是老罗书里讲的 log 驱动,而是在应用层实现的一个守护进程。

阅读全文

Android P 源码分析 3 - SharedPreferences 源码分析

本来按顺序这一篇应该是 logd,但突然有点好奇 SP 在保存数据的时候是怎么同步的,就还是先看 SP 吧,当做在开始啃 logd 这个硬骨头前轻松一下(虽然这么说,SP 还是有很多值得我们学习的地方的)。

阅读全文

Android P 源码分析 2 - 强弱指针的实现

继上篇我们学习了 Android 轻量级指针的实现,是时候来看“重量级”指针的实现了。在 Android 里,“重量级”指针指的是 RefBasesp/wp 配合使用的情况,它提供了完整的强、弱指针的支持。

阅读全文

Android P 源码分析 1 - 轻量级智能指针的实现

作为 Android 源码分析系列文章的第一篇,我们先看 LightRefBase 的源码,热热身。

阅读全文

Java 程序员眼里的 Linux 内核 —— wait_event 源码分析

看 Linux 的 wait_event 源码时,联想到我们平时经常用得比较多的 wait/notify、double-check 和 volatile,突然意识 wait_event 简简单单几行代码的背后,涉及的知识非常丰富。本篇文章我们就一起了来探索它背后的知识,然后尝试着和我们的日常开发关联起来。

阅读全文

Linux 内核页表的创建

内核跟普通的应用一样,为了使用虚拟内存,也需要一个给 CPU 设置一个页表。在这篇文章中,我们就一起来了解 Linux 是如何为内核创建页表的。

阅读全文