主页

Activity 渲染流程

我们刚开始学习安卓时,第一课就是在 ActivityonCreate 方法中,调用 setContentView 设置布局,且我们知道,在 onResume 时,画面才会渲染;所以要分析 Activity 的渲染流程,就要从这三部分入手。

阅读更多

RxJava2 源码简析

Observable 内部有许多静态方法(操作符),比如我们常用的 createmapflatmap 等,调用这些静态方法,会返回操作符对应的 Observable 子类,比如 ObservableCreateObservableMapObservableFlatMap 等;同时,新的 Observable 子类会将调用方保存到 source 变量中;

最后我们会调用 subscribe 方法,传入 Observer,该方法内部会调用到 Observable 子类的 subscribeActual 方法;在 subscribeActual 方法中,通过 source::subscribe 来调用上一个 Observable 子类的 subscribe 方法,传入自己的 Observer,直到最上面的 Observable

然后又从最上面的 Observable 开始,对传入的 Observer 调用 onSubscribeonNext 等,最后调用到我们传入的 Observer

在整个过程中,最重要的便是 subscribeActual 方法,和传入 source::subscribeObserver 子类。

阅读更多

Java 线程池源码解析

ExecutorService::newFixedThreadPool()ExecutorService::newSingleThreadExecutor()ExecutorService::newCachedThreadPool() 创建的都是 ThreadPoolExecutor 对象,ExecutorService::newScheduledThreadPool() 方法可以创建支持延时任务的线程池 ScheduledThreadPoolExecutor,这个类也是 ThreadPoolExecutor 的子类,所以直接从 ThreadPoolExecutor 类开始分析;

ps: 《阿里巴巴Java开发手册》中不建议使用 ExecutorService 来创建线程池。

阅读更多

Activity 启动流程

Activity 的启动流程其实看了几遍,但是发现容易忘,所以在这里记录一下调用链,方便以后回顾。

本次分析基于 Android Api 28.

阅读更多

conan 实战之 cpp-httplib

前言

最近在搭建 c++ 的基础库,使用了 conan 来进行管理;其中团队几个项目同时使用了 cpp-httplib 库,另外一个项目由于设备限制,只能通过系统提供的代理方式来进行网络请求,所以还是手搓的网络请求;现在目标是修改 cpp-httplib 以支持被限制的设备,同时使用 conan 管理 cpp-httplib。

阅读更多