Kotlin 协程到底运行在哪个线程里

与其说协程是一个轻量级线程,我更愿意把它当然一个个待执行/可执行的任务。这样就引申出一个问题——协程是运行在哪个线程上的?这就是本篇文章想要探讨的问题,同时我们也将学习如何让协程在特定的线程里执行。

阅读全文

kotlin 协程上下文那点事

用线程做类比的话,协程的 context 可以认为是协程的“线程私有变量”,同时这个私有变量是不可变的。也就是说,我们在创建一个协程的时候,他的 context 携带的信息就已经确定了下来

阅读全文

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 配合使用的情况,它提供了完整的强、弱指针的支持。

阅读全文