Gityuan

Keep on going never give up

[置顶]Android 操作系统架构开篇

基于Android 6.0或更高版本的源码,专注于分享Android系统原理、架构分析的原创文章,这是Android系列文章的开篇。

[置顶]Flutter 跨平台演进及架构开篇

基于Flutter 1.5.4或更高版本的源码,专注于分享Flutter引擎、框架、虚拟机等架构与原理解读的原创文章。

Android消息机制2-Handler(Native层)

本文基于Android 6.0的源代码,来分析native层的消息处理机制 相关源码 framework/base/core/java/andorid/os/MessageQueue.java framework/base/core/jni/android_os_MessageQueue.cpp framework/base/core/java/andorid/os/Looper...

Android消息机制1-Handler(Java层)

本文基于Android 6.0的源代码,来分析Java层的handler消息处理机制 framework/base/core/java/andorid/os/ - Handler.java - Looper.java - Message.java - MessageQueue.java 一、概述 在整个Android的源码世界里,有两大利剑,其一是Binder...

Linux信号(signal)机制

信号(signal)是一种软中断,信号机制是进程间通信的一种方式,采用异步通信方式 一、信号类型 Linux系统共定义了64种信号,分为两大类:可靠信号与不可靠信号,前32种信号为不可靠信号,后32种为可靠信号。 1.1 概念 不可靠信号: 也称为非实时信号,不支持排队,信号可能会丢失, 比如发送多次相同的信号, 进程只能收到一次. 信号值取值区间为1~31;...

进程篇—进程整理

整理Android手机,核心进程和线程情况 一、概括 系统启动架构图: 上图在Android系统-开篇中有讲解,是从Android系统启动的角度来分析,本文是从进程/线程的视角来分析该问题。 1.1 父进程 在所有进程中,以父进程的姿态存在的进程(即图中的浅红色项),如下: kthreadd进程: 是所有内核进程的父进程 init进程 : 是所有用户进程的...

进程状态的切换

进程状态转换,同样可用于线程的状态转移 一、进程状态 进程的生命周期内,有5种状态,分别为new, runnable, running, blocked, dead共5种状态,进程所处的状态,会随着系统负载以及运行环境的变化而不断发生改变(由一个状态切换到另一个状态)。 创建状态(new):进程正在被创建,仅仅在堆上分配内存,尚未进入就绪状态; ...

select/poll/epoll对比分析

select/poll/epoll都是IO多路复用机制,可以同时监控多个描述符,当某个描述符就绪(读或写就绪),则立刻通知相应程序进行读或写操作。本质上select/poll/epoll都是同步I/O,即读写是阻塞的。 一、select 原型: int select (int maxfd, fd_set *readfds, fd_set ...

理解Refbase强弱引用

基于Android 6.0的源码剖析, 加深对Refbase,sp/wp的认知. system/core/libutils/RefBase.cpp system/core/include/utils/RefBase.h system/core/include/utils/StrongPointer.h 一. 概述 看过Android源码中的C++代码,一定不会对sp/wp感到...

Binder系列10—总结

基于Android 6.0的源码剖析, Binder所涉及的源码目录 1. Binder概述 从IPC角度来说:Binder是Android中的一种跨进程通信方式,该通信方式在linux中没有,是Android独有; 从Android Driver层:Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder; 从Android Native层...

Binder系列9—如何使用AIDL

自定义binder架构的 client/ server组件 一、AIDL 1.1 Server端 RemoteService.java 本例是为了演示进程间的通信机制,故需要将Service与Activity处于不同的进程,需要在AndroidManifest.xml中,把service配置成android:process=":remote",进程也可以命名成其他的。 pu...

Binder系列8—如何使用Binder

自定义binder架构的 client/ server组件 一、Native层Binder 源码结构: ClientDemo.cpp: 客户端程序 ServerDemo.cpp:服务端程序 IMyService.h:自定义的MyService服务的头文件 IMyService.cpp:自定义的MyService服务 Android.mk:源码build文件...

Binder系列7—framework层分析

主要分析Binder在java framework层的框架,相关源码: framework/base/core/java/android/os/ - IInterface.java - IServiceManager.java - ServiceManager.java - ServiceManagerNative.java(内含ServiceManagerProx...

Binder系列6—获取服务(getService)

基于Android 6.0的源码剖析, 本文Client如何向Server获取服务的过程。 一、 获取服务 在Native层的服务注册,我们选择以media为例来展开讲解,先来看看media的类关系图。 1.1 类图 点击查看大图 图解: 蓝色: 代表获取MediaPlayerService服务相关的类; 绿色: 代表Binder架构中与Binder驱动通信过...

Binder系列5—注册服务(addService)

基于Android 6.0的源码剖析, 本文讲解如何向ServiceManager注册Native层的服务的过程。 framework/native/libs/binder/ - Binder.cpp - BpBinder.cpp - IPCThreadState.cpp - ProcessState.cpp - IServiceManager.cpp - ...

Binder系列4—获取ServiceManager

基于Android 6.0的源码剖析, 本文详细地讲解defaultServiceManager流程 framework/native/libs/binder/ - ProcessState.cpp - BpBinder.cpp - Binder.cpp - IServiceManager.cpp framework/native/include/binder/ ...

Binder系列3—启动ServiceManager

基于Android 6.0的源码剖析, 本文详细地讲解了ServiceManager启动流程 framework/native/cmds/servicemanager/ - service_manager.c - binder.c kernel/drivers/ (不同Linux分支路径略有不同) - staging/android/binder.c - an...