Android CPU 架构

0x0001 什么是 ABI

ABI(Application Binary Interface、程序二进制接口),描述了应用程序和操作系统之间,一个应用和它的库之间,或者应用的组成部分之间的低接口。

由于不同的手机使用不同的 CPU,而不同的 CPU 支持不同的指令集,不同指令集下的数据格式、操作规范不尽相同,所以CPU 与指令集的每种组合都有专属的应用二进制接口,即 ABI,所以在开发过程中,如果我们引入 so 库,就需要为每个 CPU 架构指定

Read More

git submodule 使用

1. 为项目添加子模块

git submodule add [repository] [path]

此命令会生成 .gitmodule 文件以及在 .git/config 文件中添加子模块的相应信息

2. 克隆一个带有子模块的项目

Read More

Shell 基础学习(一)

0x0001 Bash 常用快捷键

Ctrl + A: 将光标移到命令行开头

Ctrl + E: 将光标移到命令行结尾

Ctrl + U: 删除或剪切光标之前的命令

Ctrl + K: 删除或剪切光标之后的命令

Ctrl + Y: 粘贴以上两个快捷键的内容

Read More

EventBus 粘性事件

0x0001 普通事件和粘性事件

通过源码我们看一下两者的差别:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void postSticky(Object event) {
synchronized (stickyEvents) {
stickyEvents.put(event.getClass(), event);
}
post(event);
}

public void post(Object event) {
....
while (!eventQueue.isEmpty()) {
// 每次发布一个事件,会将该事件从事件序列中移除,也就是说,事件发布后,不管是否有订阅者,
postSingleEvent(eventQueue.remove(0), postingState);
}
}
....
}

Read More

EventBus 使用 APT 生成索引以及源码分析

0x0001 配置 EventBus 使用 APT 生成索引

具体可以参见官方文档

通过文档可以看到可以通过三种方式为 项目配置索引:APT、kapt、android-apt,这只是实现功能的不同方式,本文介绍 APT 生成索引,其他两种原理基本相同.

使用 APT 生成索引,不可在匿名内部类中定义订阅方法。要想使用 APT 生成索引,需要对项目进行如下配置:

针对 app 模块下的 build.gradle 文件做以下更改:

Read More

利用异常机制获取堆栈轨迹元素

0x0001 什么是堆栈轨迹?

堆栈轨迹(stack trace) 是 一个方法调用过程的列表,它包含程序在执行过程中调用的特定位置。当 Java 程序正常终止,而没有捕获异常时,就可以通过这个列表显示出来。

0x0002 获得堆栈轨迹元素

方法一:

可以通过调用 Throwable 的 printStackTrace 方法,访问堆栈轨迹的文本描述信息

1
2
3
4
Throwable throwable = new Throwable();
StringWriter out = new StringWriter();
throwable.printStackTrace(new PrintWriter(out));
String desc = out.toString();

Read More