Gityuan

Keep on going never give up

[置顶]Android系统架构开篇

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

深度解读ArrayMap优势与缺陷

ArrayMap在内存使用上较HashMap更有优势,在Android开发中广为使用的基础API,也是大家所推荐的方法, 但你是否想过Google如此重要的基础类存在缺陷? 一、引言 在移动设备端内存资源很珍贵,HashMap为实现快速查询带来了很大内存的浪费。为此,2013年5月20日Google工程师Dianne Hackborn在Android系统源码中新增ArrayMap...

源码解读epoll内核机制

从源码角度来领略一下内核的轮询机制 kernel/fs/eventpoll.c kernel/include/linux/poll.h kernel/include/uapi/linux/eventpoll.h 一、概述 在linux还没有epoll机制前,select和poll作为IO多路复用的机制实现并发程序,但这两种方式有着如下缺点: 通过select方式单个进...

源码解读poll/select内核机制

从源码角度来解读内核的轮询机制,了解是如何实现事件监控功能的 kernel/fs/select.c kernel/include/linux/poll.h kernel/include/linux/fs.h kernel/include/linux/sched.h kernel/include/linux/wait.h kernel/kernel/sched/wait.c kern...

源码解读Linux等待队列

从源码角度来解读Linux等待队列机制,了解休眠与唤醒的运转原理 kernel/include/linux/wait.h kernel/kernel/sched/wait.c kernel/include/linux/sched.h kernel/kernel/sched/core.c 一、概述 Linux内核的等待队列是非常重要的数据结构,在内核驱动中广为使用,它是以双循环...

理解Android.bp

介绍Android最新的编译系统 一、简介 早期的Android系统都是采用Android.mk的配置来编译源码,从Android 7.0开始引入Android.bp。很明显Android.bp的出现就是为了替换掉Android.mk。 再来说一说跟着Android版本相应的发展演变过程: Android 7.0引入ninja和kati Android 8.0使用A...

解读Android进程优先级ADJ算法

本文基于原生Android 9.0源码来解读进程优先级原理,基于篇幅考虑会精炼部分代码 一、概述 1.1 进程 Android框架对进程创建与管理进行了封装,对于APP开发者只需知道Android四大组件的使用。当Activity, Service, ContentProvider, BroadcastReceiver任一组件启动时,当其所承载的进程存在则直接使用,不存在则由框架代码自...

Binder Driver缺陷导致定屏的案例

本文讲解异步binder call是如何阻塞整个系统的,通过ramdump信息以及binder通信协议来演绎并还原定屏现场。 一、背景知识点 解决此问题所涉及到的基础知识点有:Trace、CPU调度、Ramdump推导、Crash工具、GDB工具、Ftrace, 尤其深入理解binder IPC机制。 1.1 工具简介 Trace:分析死锁问题的最基本的技能,通过kill -3...

系统角度解读Android P新特性

引言 2018年3月8日,谷歌发布了Android P的预览版,预计今年的Q3季度发布final release版本,有不少文章从开发者角度介绍了Android P的新特征,初步来看给感觉这次大版本似乎并没有什么改变。接下来,将从系统Treble,System,Framework,Runtime, Security等多方面来解读一下Android P的变化。 欢迎关注Gityuan的微信...