Android 源码秘密(1)—— ProcessLifecycleOwner

尝试过事无巨细一行一行代码分析源码,也试过以感性的方式总结源码;第一种方式总觉得容易把读者绕进去,第二种则有些人看后觉得好像什么也没说。这里我尝试使用第三种方法,回到我们阅读源码的初衷——学习如何写代码,只是摘抄出源码里有教益意义的片段,来展示它所使用的小技巧。

作为第一个尝试,本篇文章我们研究的对象是 Android arch component 里的 ProcessLifecycleOwner

阅读全文

Fragment 使用陷阱

本篇文章主要总结过去在项目里遇到的由于 Fragment 误用带来的一些问题,不涉及 Fragment 的具体用法。这里说的 Fragment 带来的问题,基本是由 Activity 被系统销毁后自动重新创建所引发的。下面我们从 Fragment 的基本使用、参数传递和 ViewPager 的交互这三个方面来分别讨论。

阅读全文

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 的源码,热热身。

阅读全文