Gityuan

Keep on going never give up

[置顶]Android系统开篇

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

解读Android进程优先级ADJ算法

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

Binder Driver缺陷导致定屏问题分析

本文讲解异步binder call是如何阻塞整个系统的,通过ramdump信息以及binder通信协议来演绎并还原定屏现场。 一、背景知识点 解决此问题所涉及到的基础知识点有:Trace、CPU调度、Ramdump推导、Crash工具、GDB工具、Ftrace, 尤其深入理解binder IPC机制。 欢迎关注Gityuan的微信公众号:Android达摩院(AndroidAcadem...

系统角度解读Android P新特性

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

NotificationManagerService原理分析

基于Android 7.0源码分析通知机制,相关源码如下: frameworks/base/services/core/java/com/android/server/notification/ - NotificationManagerService.java - ManagedServices.java frameworks/base/core/java/andr...

/proc/stat解析

本文解析进程节点含义 一. 概述 1.1 CPU时间 cpu指标 含义 user 用户态时间 nice 用户态时间(低优先级,nice>0) system 内核态时间 ...

Linux进程pid分配法

一. 概述 Android系统创建进程,最终的实现还是调用linux fork方法,对于linux系统每个进程都有唯一的 进程ID(值大于0),也有pid上限,默认为32768。 pid可重复利用,当进程被杀后会回收该pid,以供后续的进程pid分配。 上一篇文章Linux进程管理 详细地介绍了进程fork过程,在copy_process()过程,执行完父进行文件、内存等信息的拷贝,紧接...

Linux进程管理(二)--fork

基于Kernel 4.4源码 kernel/include/linux/sched.h kernel/include/linux/kthread.h kernel/arch/arm/include/asm/thread_info.h kernel/kernel/fork.c kernel/kernel/exit.c kernel/kernel/sched/core.c 一. ...

Linux进程管理(一)

一. 概述 Linux是类Unix系统,借鉴了Unix的设计并实现相关接口,但并非Unix。Linux是由Linus Torvalds于1991年创造的开源免费系统,采用GNU GPL协议保护,下面列举Linux的一些主要特点: Linux系统中万物皆为文件,这种抽象方便操作数据或设备,只需一套统一的系统接口open, read, write, close即可完成对文件的操作 ...

Android调试技巧(一)

本文介绍一些Android常见的调试技巧 一. 获取Trace 调用栈信息(Trace)是分析异常经常使用的,这里简单划分两类情况: 当前线程Trace: 当前执行流所在线程的调用栈信息; 目标进程Trace:可获取目标进程的调用栈,用于动态调试; 1.1 当前线程Trace 1) Java层 Thread.currentThread().dumpStack(...

AMS之dumpsys篇

基于Android 7.0的源码分析 一.概述 前面介绍过AMS相关的一些数据结构,每个数据结构有大量的成员变量,为了查询当前手机运行时状态的 变化值,可以通过dumpsys activity命令来完成,该方法最终是调用AMS.dump()方法。 dumpsys命令用法简要介绍过dumpsys命令 的基本用法,以及系统服务列表信息,那么本文重点介绍AMS。 根据dumpsys ...