Android log 机制 - 删除过多的 log

我们知道,每种 log 数据类型都有一个总量限制,如果超过了这个限制,为了腾出空间,就需要删除一些旧数据。这个删除旧数据的功能,便是 LogBuffer::prune 来完成的。

阅读全文

Android log 机制 - logd 如何接收 log 数据(下)

写入 log 数据时,我们先通过 socket 读取客户端 log,然后调用 logBuffer->log 函数写入 log 缓冲并唤醒读 log 的客户端。由于每种类型的 log 数据都有总量限制,写入数据后可能需要删除旧数据。由于篇幅关系,删除旧数据这一部分下一篇再讲。

阅读全文

Android log 机制 - logd 如何接收 log 数据(上)

按计划,在本篇,我们先看 LogBuffer 的初始化,然后深入 LogListenerLogListener 用于接受客户写入的 log 数据。虽然在 main 函数里先创建的是 LogReader,这里我们还是先看 LogListener,毕竟,先写了 log,才有东西可以读。

阅读全文

如何使用 Visual Studio Code 阅读 Android 源码

本文主要关注源码的阅读,而不是编译、调试。

阅读全文

Android log 机制 - logd 总览

Android 早期版本使用的是一个 log 驱动,后来逐渐使用 logd 进程替代(具体哪个版本我就没有去探究了,至少在 Android 8.0 里,log 驱动已经被移除)。原有 log 驱动负责的功能,都由 logd 完成。此外,logd 还可以读取 Linux 内核 printk、selinux 的 log。

阅读全文

MessageQueue 实现详解(下)- C++ 世界对 Message 的支持

除了 Java 层,Handler 框架在 C++ 层也有支持。本篇,我们就来看看 C++ 部分。

阅读全文

MessageQueue 实现详解(上)- Java 世界中的 Message

从 Android 2.3 开始,Java、native 层都可以把 Message 放到 Looper 线程处理,但是这两个世界的 Message 是完全不相关的。在本篇,我们先了解 Java 世界的 Message 是如何入队、出队的。

阅读全文

理解 Handler 框架

本篇我们先从 HandlerThread 讲起,然后整体上看看 Handler 框架。

阅读全文

binder 情景分析 - service 查询

在使用一个服务的时候,客户端并不知道服务的位置,所以需要跟名字服务器查询。在 binder 架构中,扮演名字服务器这个角色的,就是 service manager。

阅读全文

binder 情景分析 - 为什么注册后的 BBinder 不会被意外释放?(下)—— binder 生命周期管理机制概述

接上篇,我们继续讨论 binder 的生命周期管理。

阅读全文