Gityuan

Keep on going never give up

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

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

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

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

Android系统服务的注册方式

一. 概述 启动启动过程有采用过两种不同的方式来注册系统服务: ServiceManager的addService() SystemServiceManager的startService() 其核心都是向ServiceManager进程注册binder服务,但功能略有不同,下面从源码角度详加说明。 二. SM.addService方式 这里以InputManagerSe...

理解Android线程创建流程

基于Android 6.0源码剖析,分析Android线程的创建过程 /android/libcore/libart/src/main/java/java/lang/Thread.java /art/runtime/native/java_lang_Thread.cc /art/runtime/native/java_lang_Object.cc /art/runtime/thre...

Android LowMemoryKiller原理分析

frameworks/base/services/core/java/com/android/server/am/ProcessList.java platform/system/core/lmkd/lmkd.c kernel/common/drivers/staging/Android/lowmemorykiller.c 一. 概述 Android的设计理念之一,便是应用程序退出,但...

彻底理解Android Binder通信架构

基于Android 6.0的源码剖析, 本文深度剖析Binder IPC过程, 这绝对是一篇匠心巨作,从Java framework到Native,再到Linux Kernel,带你全程看Binder通信过程. 一. 引言 1.1 Binder架构的思考 Android内核是基于Linux系统, 而Linux现存多种进程间IPC方式:管道, 消息队列, 共享内存, 套接字, 信...

Binder子系统之调试分析(三)

一. binder调试信息 1.1 binder_thread 调用方法:print_binder_thread thread 8980: l 12 //tid=8980,looper=12 关于looper状态值: BINDER_LOOPER_STATE_REGISTERED = 0x01, // 创建注册线程BC_REGISTER_LOOPER BINDER_LOOPER_...

Binder子系统之调试分析(二)

一. 节点创建 上一篇文章已经介绍了binder子系统调试的一些手段,这篇文章再来挑选系统几个核心服务进程来进行分析. 1.1 内核编译选项 如果系统关闭了debugfs,则通过编辑kernel/arch/arm/configs/×××_defconfig //开启debugfs CONFIG_DEBUG_FS=y //有时,可能还需要配置fs的白名单列表,例如: CONFIG_DE...

Binder子系统之调试分析(一)

一. 概述 在博客以前有写过关于binder系列,大概写了10篇关于binder的文章,从binder驱动,到native层,再到framework,一路写到app层的使用。有兴趣的可以看看 Binder系列—开篇。 二.Binder驱动调试 看过Binder系列文章的同学,会发现Binder IPC过程最终都交给Binder Driver来完成,这是真正干跨进程通信活的地方,那么意...

AndroidStudio内存工具

引言 Android Studio提供了强大的分析功能,关于内存分析工具包含: Memory Monitor Heap Viewer Allocation Tracker 接下来,简单介绍一下使用 1. Memory Monitor 2. Heap Viewer 堆内存查看工具,用于监控App的某一时刻的内存堆上的具体使用情况,从而帮助找出内存泄露。 用法 ...

AndroidStudio常用快捷键

说明: 本文中的快捷键是针对Linux环境,且Keymaps为default情况下的映射关系。 标红或加粗的快捷键是博主多年阅读Android系统源码过程中高频率使用的一些快捷键 关联快捷键,是指具有关联关系的快捷键,把相关联的键放到一组,是为了便于记忆,比如展开和收缩,当前查找与全局查找。 一、阅读代码 很多情况下,Linux下的Alt键对应Mac下的Option键,...

AndroidStudio源码开发环境搭建

一. 准备 本文介绍采用Android Studio来搭建源码调试环境 1.1 下载Android Studio **调整内存大小: ** Android Studio需要大量的内存来加载Android源码,所以经常会遇到内存不足的问题, 需要加大内存. 点击Help-> Edit Custom VM Options, 比如 “-Xms4096m -Xmx4096m” 更多资料...

Android进程调度之adj算法

一、概述 提到进程调度,可能大家首先想到的是Linux cpu调度算法,进程优先级之类概念,本文并不打算介绍这些内容,而是介绍Android framework层中承载activity/service/contentprovider/broadcastrecevier的进程是如何根据组件运行状态而动态调节进程自身的状态。进程有两个比较重要的状态值,即adj(定义在ProcessList.j...

理解ContentProvider原理

基于Android 6.0源码剖析,本文涉及的相关源码: frameworks/base/core/java/android/app/ - ActivityThread.java - ContextImpl.java - IActivityManager.java frameworks/base/core/java/android/content/ ...

Android存储系统之架构篇

基于Android 6.0的源码,剖析存储架构的设计 一、概述 本文讲述Android存储系统的架构与设计,涉及到最为核心的便是MountService和Vold这两个模块以及之间的交互。上一篇文章Android存储系统之源码篇从源码角度介绍相关模块的创建与启动过程,那么本文主要从全局角度把握和剖析Android的存储系统。 MountService:Android Binde...

Android存储系统之源码篇

基于Android 6.0源码, 来分析存储相关架构,涉及源码: /framework/base/services/java/com/android/server/SystemServer.java /framework/base/services/core/java/com/android/server/MountService.java /framework/base/serv...

Android重启流程(一)

framework/base/services/core/java/com/android/server/power/PowerManagerServer.java framework/base/services/core/java/com/android/server/power/ShutdownThread.java 一、概述 重启动作从按键触发中断,linux kernel层给A...