Bai HongHua


  • 首页

  • 分类

  • 归档

  • 标签

Framework篇--开机启动init进程

发表于 2021-07-05 | 分类于 Framework

基于 Android 6.0.0 源码进行分析

init 进程涉及的源码:

  • /system/core/init/init.cpp

概述

init 进程是 Linux 系统中用户空间的第一个进程,其进程号为 1。在 Kernel 启动后,在用户空间启动 init 进程,并调用 init 中的 main() 方法执行 init 进程的职责。对于 init 进程的功能,通过分析其 main() 方法的逻辑,主要可以划分为以下 5 部分:

  • 挂载、创建所系统运行所需要的目录,如 tmpfs、pts、proc…
  • 加载属性服务;
  • 解析并运行所有的 init.rc 相关的文件;
  • 化身为守护进程,处理signal、property和keychord等服务;
阅读全文 »

Retrofit2源码分析

发表于 2020-06-06 | 分类于 Android开源库

前言

相信使用过 Retrofit2 网络请求库的童鞋都会对上面的图片有一种熟悉的感觉。是的,上面的图片便是来源自 Retrofit 的官网的截图。官网上使用了一句话对 Retrofit 进行了扼要的介绍: A type-safe HTTP client for Android and Java,我对这句话的理解是:Retrofit 是一个可以使用在 Android 和 Java 上面的 类型安全的 HTTP 客户端。为什么说 Retrofit 是一个类型安全的的 HTTP 客户端呢?我会在文中提及、以及文后小结出来的。

阅读全文 »

AIDL机制

发表于 2020-04-21 | 分类于 Android进阶

前言

前一段时间,除了忙在公司项目的重构和优化,然后就主要把时间花在 Java 的一些基础进行回顾。按照我的计划,接下来的一段时间里面,我会把时间主要花在 Android 的 Framework 层,当然也计划了 Kotlin 的协程呀、Jetpack 组件呀这些的深入理解….

阅读全文 »

聊一聊JavaPoet技术

发表于 2020-04-10 | 分类于 Java

前言

JavaPoet is a Java API for generating .java source files.

阅读全文 »

RxJava系类-合并型操作符实战

发表于 2020-04-09 | 分类于 Android开源库
# startWith()
阅读全文 »

RxJava系列-条件型操作符实战

发表于 2020-04-09 | 分类于 Android开源库
# all()
阅读全文 »

RxJava系列-过滤型操作符实战

发表于 2020-04-09 | 分类于 Android开源库
# filter()
阅读全文 »

RxJava系列-变换型操作符实战

发表于 2020-04-09 | 分类于 Android开源库

前言

在 RxJava 中,上游和下游的界限有时候并不是很明显。我的理解是:RxJava 的上下游的区分需要以观察者为比较的参照物,在观察者的之前的,都是可以看着上游。

如下面的 map() 变换操作符,just() 和 map() 操作符都可以看着上游,因为观察者订阅事件是发生在 Consumer 匿名对象中。

阅读全文 »

RxJava系列-创建型操作符实战

发表于 2020-04-09 | 分类于 Android开源库

前言

在实战 RxJava 之前,先谈谈我自己对 RxJava 的理解,我们知道 RxJava 是基于观察者模式的,我们可以把 RxJava 的使用看着整体的一条链:

  • 在链的最上游:是生成、发送、或者发射事件的 Observable;
  • 在链的最下游:是根据上游的生成、发送、或者发射事件来做出相对应的动作的 Observer;
  • 在链的中游:作为中介的节点,变动上下游的性质,如线程的切换等;

我想,挺多的小伙伴可能在刚接触 RxJava 的时候,会感到疑惑:为什么是被观察者(Observable)订阅(subscribe)观察者(Observer),而不是观察者订阅被观察者?

我认为可以这么理解吧:首先你需要知道 Android 是基于事件驱动模型的,也就是说程序的执行流程是根据用户的动作(例如用户的屏幕触摸)触发的事件决定的。程序的执行流程在 RxJava 中就好比作观察者做出的动作,用户触发的事件就好比作被观察者产生的事件,程序的执行流程是代码固死的了,而用户的动作则是不确定的,程序代码根据用户操作执行相应的代码(如用户点击声量按钮只会调整音量,而不会让手机关机)。

然后为什么不是观察者订阅被观察者,其实这只是这样的写法更加符合事件驱动编程,先把观察者的代码加载进内存,以等待被观察者的到来后(如网络请求后的响应),执行对应的代码,因为,你永远不知道你的明天会怎样,唯一的只能先做好准备去面对。

阅读全文 »

JVM系列-虚拟机类加载机制

发表于 2020-04-08 | 分类于 Java进阶

前言

虚拟机把描述的类的数据从 Class 文件加载进内存里面,同时对数据进行验证、解析、以及初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制。

阅读全文 »
12…4<i class="fa fa-angle-right"></i>

33 日志
16 分类
7 标签
RSS
© 2017 - 2021 Bai HongHua
Powered by Bai HongHua
Thanks For Hexo and NexT.Mist