Gityuan

Keep on going never give up

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

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

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

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

Input系统—UI线程

一. 概述 前面文章都是介绍了两个线程InputReader和InputDispatcher的工作过程。在InputDispatcher的过程讲到 调用InputChanel通过socket与远程进程通信,本文便展开讲解这个socket是如何建立的。 对于InputReader和InputDispatcher都是运行在system_server进程; 用户点击的界面往往可能是某一个app...

Input系统—InputDispatcher线程

基于Android 6.0源码, 分析InputManagerService的启动过程 一. InputDispatcher起点 上篇文章输入系统之InputReader线程,介绍InputReader利用EventHub获取数据后生成EventEntry事件,加入到InputDispatcher的mInboundQueue队列,再唤醒InputDispatcher线程。本文将介...

Input系统—InputReader线程

基于Android 6.0源码, 分析InputManagerService的启动过程 一. InputReader起点 上一篇文章Input系统—启动篇,介绍IMS服务的启动过程会创建两个native线程,分别是InputReader,InputDispatcher. 接下来从InputReader线程的执行过程从threadLoop为起点开始分析。 1.1 threadLo...

Input系统—启动篇

基于Android 6.0源码, 分析InputManagerService的启动过程 frameworks/native/services/inputflinger/ - InputDispatcher.cpp - InputReader.cpp - InputManager.cpp - EventHub.cpp - InputListener.cpp fr...

理解Android ANR的信息收集过程

基于Android 6.0源码, 分析当发生ANR时系统的处理过程 frameworks/base/core/java/android/os/Debug.java frameworks/base/core/jni/android_os_Debug.cpp system/core/libcutils/debugger.c 一. ANR场景 无论是四大组件或者进程等只要发生ANR...

Native进程之Trace原理

一. 概述 当发生ANR(Application Not Response,对于Java进程可通过kill -3向目标进程发送信号SIGNAL_QUIT, 输出相应的traces信息保存到目录/data/anr/traces.txt;而对于Native进程可通过 debuggerd输出traces信息。 可通过一条命令来获取指定Native进程的traces信息,例如输出pid=1752...

解读Java进程的Trace文件

分析Art虚拟机的trace原理,相关源码都位于/art/runtime目录: /art/runtime/ - signal_catcher.cc - runtime.cc - intern_table.cc - thread_list.cc - java_vm_ext.cc - class_linker.cc - gc/he...

多用户管理UserManager

基于Android 6.0的源码剖析多用户模型 framework/base/services/core/java/com/android/server/pm/UserManagerService.java framework/base/core/java/android/os/UserManager.java framework/base/core/java/android/co...

Installd守护进程

基于Android 6.0的源码剖析installd的过程 system/core/rootdir/init.rc frameworks/base/cmds/installd/installd.cpp frameworks/base/cmds/installd/commands.cpp frameworks/base/cmds/installd/utils.cpp 一、 概述 ...

PackageManager启动篇

基于Android 6.0源码, 分析PackageManagerService的启动过程 frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java frameworks/base/services/core/java/com/android/server/pm/Packa...

进程的Binder线程池工作过程

基于Android 6.0源码剖析,分析Binder线程池以及binder线程启动过程。 frameworks/base/cmds/app_process/app_main.cpp frameworks/native/libs/binder/ProcessState.cpp framework/native/libs/binder/IPCThreadState.cpp kernel...

Android进程绝杀技--forceStop

基于Android 6.0源码剖析,force-stop的全过程 一.概述 1.1 引言 话说Android开源系统拥有着App不计其数,百家争鸣,都想在这“大争之世”寻得系统存活的一席之地。然则系统资源有限,如若都割据为王,再强劲的CPU也会忙不过来,再庞大的内存终会消耗殆尽,再大容量的电池续航终会昙花一现。 面对芸芸众生,无尽变数,系统以不变应万变,一招绝杀神技forceS...

Android四大组件与进程启动的关系

一. 概述 Android系统将进程做得很友好的封装,对于上层app开发者来说进程几乎是透明的. 了解Android的朋友,一定知道Android四大组件,但对于进程可能会相对较陌生. 一个进程里面可以跑多个app, 一个app也可以跑在多个进程里,通过配置Android:process属性来决定所运行在哪个进程。 再进一步进程是如何创建的, 可能很多人不知道fork的存在. 在我的文章...

Binder死亡通知机制之linkToDeath

基于Android 6.0源码, 涉及相关源码 frameworks/base/core/java/android/os/Binder.java frameworks/base/core/jni/android_util_Binder.cpp frameworks/native/libs/binder/BpBinder.cpp 一. 概述 死亡通知是为了让Bp端(客户端进程)...

binderDied()过程分析

一. 概述 理解Android进程启动之全过程介绍了进程是如何从AMS.startProcessLocked一步步创建的; 当进程不再需要时便会有杀进程的过程; 理解杀进程的实现原理介绍了Process.killProcess()如何一步步地将进程杀死. 当系统内存不足时,会触发lmk杀进程; 以及系统本身通过AMS也会控制系统中各个状态的进程个数上限. 当进程真正的被杀死之后,通过bi...