概述 该篇基于AndroidQ,主要介绍系统启动中的 AMS(ActivityManagerService)的启动过程. AMS对四大组件(AndroidQ将activity移到了ActivityTaskManagerService中,但也和AMS相关联)进行管理和调度.同时,AMS也对进程.电池.内存.权限等进行管理. AMS的启动过程 和 结束 部分,主要跟踪的代码过程,加以简单说明.代码中添加了注释,可做参考,有点长.如果只想简单了解下,可以直接看下最后的 简单总结 部分. AMS相关目录…
概述 该篇基于Android 10的代码.在 AMS之AMS的启动---Android Framework(Android 10) 中已经介绍了,在Android 10中,activity的调度和管理已经从AMS移到了ActivityTaskManagerService中(这里简称ATMS),这在下面关于应用第一次的启动的过程中也能清楚看到. 这个详细过程有点复杂,所以可能有不准确的地方欢迎指出交流. 应用的启动过程有点复杂,该部分简单概述下. 第二部分是跟着代码流程一步一步看的.这里涉及多次跨…
前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的呢?系统如何知道是如何知道点击了某个界面按钮,按了某个按键,知道交给哪个应用处理的? 该篇主要介绍这些,即 输入事件从生成(存于设备节点中) 传递到目标View的过程. 在进入输入事件传递机制之前,首先了解一个东西---设备节点. 了解设备节点 当有输入事件时,Linux内核会将事件数据写入 设备节…
简介 Window简介 Android中,Window是一个重要部分,用户看到的界面.触摸显示界面进行一系列操作都涉及到Window.但实际上,Window本身并不具备绘制功能. 该篇简单介绍下Window的一点内容,同时总结下WMS的启动过程.在下篇会逐步介绍一个Activity是如何创建出窗口 并 添加到WMS中的. 该篇基于Andorid10的代码. 窗口涉及到一下几个功能: 窗口管理-WMS WMS管理窗口的创建.添加.删除.大小.层级等等. 输入中转-IMS(InputManagerS…
概述 这里主要介绍 PackageManagerService(简称PMS)的启动 和 一个应用的安装过程.这里只是大致总结,供参考,不少地方同样需要进一步深入了解学习的. 该篇相关代码也是基于AndroidQ的. PMS也是核心服务之一,管理包相关内容,解析AndroidManifest.xml.管理应用等,最常见的是应用的安装和卸载. 和AMS类似,PMS提供服务也是通过binder完成,也有相应的服务端和客户端. PMS的几个相关类: IPackageManager.aidl:接口,定义了…
前言 Binder 从java到c++到kernel,涉及的内容很多,很难在一篇文章中说清楚.这篇主要是自我记录,方便后续查询并拆分总结的. 因为涉及的的确非常多,不能面面俱到,所以可能一些地方感觉比较模糊.没说明白的.这需要自己去阅读了解.文章很长,需要耐心. 关于基础部分,并不是都要了解了才行,而是要完全弄清楚Binder各个层次需要,列出的一些需要多关注的知识点. 另外,该篇文章着重在注册服务和获取服务的过程,有详细的代码流程(这个有点复杂.占篇幅很大部分)辅助理解 注册和获取服务过程的整…
前言 首先看一个Android界面的布局层次结构,最直观的看一下: 我们能清晰看到,这个界面分成了3部分:顶部状态栏(statusbar).底部导航栏(navigationbar).应用界面. 题外话: 查看布局的层次结构,工具或途径可以参考下面的. Android Studio:Tools->Layout Inspector->选择要查看的进程: SDK Tools:tools/hierarchyviewer.bat. 不过最新推荐用tools/monitor.bat代替单独的hierarc…
概述 在Android中的多进程.多线程中提过,只有主线程(UI线程)可以更新UI,其他线程不可以,所以一般耗时操作放到子线程.子线程可以通过Handler将相关信息通知到主线程. Android的消息机制主要是Handler机制.Handler的工作过程,还有两个重要部分MessageQueue(消息队列,下面简称MQ)和Looper. 由于下面总结中穿插了不少源码 便于理解,导致篇幅比较长(加代码有600多行).所以先大致总结并给出大致目录,提前了解是否是需要的内容. 大致总结 消息机制的大…
synchronized关键字是JDK5之实现锁(包括互斥性和可见性)的唯一途径(volatile关键字能保证可见性,但不能保证互斥性,详细参见后文关于vloatile的详述章节),其在字节码上编译为monitorenter和monitorexit这样的JVM层次的原语(原语的意思是这个命令是原子执行的,中间不可中断,详细可查阅原语的概念,这里monitorenter和monitorexit是原语对,表明它们之间的代码段是原子执行的,所以保证了锁机制中的互斥性.如果反编译会发现同步函数的前面加上…
一.不得不提的volatile volatile是个很老的关键字,几乎伴随着JDK的诞生而诞生,我们都知道这个关键字,但又不太清楚什么时候会使用它:我们在JDK及开源框架中随处可见这个关键字,但并发专家又往往建议我们远离它.比如Thread这个很基础的类,其中很重要的线程状态字段,就是用volatile来修饰,见代码 /* Java thread status for tools, * initialized to indicate thread 'not yet started' */   p…