简介 Window简介 Android中,Window是一个重要部分,用户看到的界面.触摸显示界面进行一系列操作都涉及到Window.但实际上,Window本身并不具备绘制功能. 该篇简单介绍下Window的一点内容,同时总结下WMS的启动过程.在下篇会逐步介绍一个Activity是如何创建出窗口 并 添加到WMS中的. 该篇基于Andorid10的代码. 窗口涉及到一下几个功能: 窗口管理-WMS WMS管理窗口的创建.添加.删除.大小.层级等等. 输入中转-IMS(InputManagerS…
前言和概述 Android的输入设备,最常用的就是 触摸屏和按键 了.当然还有其他方式,比如游戏手柄,比如支持OTG设备,则可以链接鼠标.键盘等. 那么这些设备的操作 是如何传递到系统 并 控制界面的呢?系统如何知道是如何知道点击了某个界面按钮,按了某个按键,知道交给哪个应用处理的? 该篇主要介绍这些,即 输入事件从生成(存于设备节点中) 传递到目标View的过程. 在进入输入事件传递机制之前,首先了解一个东西---设备节点. 了解设备节点 当有输入事件时,Linux内核会将事件数据写入 设备节…
前言 首先看一个Android界面的布局层次结构,最直观的看一下: 我们能清晰看到,这个界面分成了3部分:顶部状态栏(statusbar).底部导航栏(navigationbar).应用界面. 题外话: 查看布局的层次结构,工具或途径可以参考下面的. Android Studio:Tools->Layout Inspector->选择要查看的进程: SDK Tools:tools/hierarchyviewer.bat. 不过最新推荐用tools/monitor.bat代替单独的hierarc…
概述 该篇基于Android 10的代码.在 AMS之AMS的启动---Android Framework(Android 10) 中已经介绍了,在Android 10中,activity的调度和管理已经从AMS移到了ActivityTaskManagerService中(这里简称ATMS),这在下面关于应用第一次的启动的过程中也能清楚看到. 这个详细过程有点复杂,所以可能有不准确的地方欢迎指出交流. 应用的启动过程有点复杂,该部分简单概述下. 第二部分是跟着代码流程一步一步看的.这里涉及多次跨…
概述 该篇基于AndroidQ,主要介绍系统启动中的 AMS(ActivityManagerService)的启动过程. AMS对四大组件(AndroidQ将activity移到了ActivityTaskManagerService中,但也和AMS相关联)进行管理和调度.同时,AMS也对进程.电池.内存.权限等进行管理. AMS的启动过程 和 结束 部分,主要跟踪的代码过程,加以简单说明.代码中添加了注释,可做参考,有点长.如果只想简单了解下,可以直接看下最后的 简单总结 部分. AMS相关目录…
概述 这里主要介绍 PackageManagerService(简称PMS)的启动 和 一个应用的安装过程.这里只是大致总结,供参考,不少地方同样需要进一步深入了解学习的. 该篇相关代码也是基于AndroidQ的. PMS也是核心服务之一,管理包相关内容,解析AndroidManifest.xml.管理应用等,最常见的是应用的安装和卸载. 和AMS类似,PMS提供服务也是通过binder完成,也有相应的服务端和客户端. PMS的几个相关类: IPackageManager.aidl:接口,定义了…
前言 Binder 从java到c++到kernel,涉及的内容很多,很难在一篇文章中说清楚.这篇主要是自我记录,方便后续查询并拆分总结的. 因为涉及的的确非常多,不能面面俱到,所以可能一些地方感觉比较模糊.没说明白的.这需要自己去阅读了解.文章很长,需要耐心. 关于基础部分,并不是都要了解了才行,而是要完全弄清楚Binder各个层次需要,列出的一些需要多关注的知识点. 另外,该篇文章着重在注册服务和获取服务的过程,有详细的代码流程(这个有点复杂.占篇幅很大部分)辅助理解 注册和获取服务过程的整…
概述 在Android中的多进程.多线程中提过,只有主线程(UI线程)可以更新UI,其他线程不可以,所以一般耗时操作放到子线程.子线程可以通过Handler将相关信息通知到主线程. Android的消息机制主要是Handler机制.Handler的工作过程,还有两个重要部分MessageQueue(消息队列,下面简称MQ)和Looper. 由于下面总结中穿插了不少源码 便于理解,导致篇幅比较长(加代码有600多行).所以先大致总结并给出大致目录,提前了解是否是需要的内容. 大致总结 消息机制的大…
ι 版权声明:本文为博主原创文章,未经博主允许不得转载. 在上一篇文章中,我们已经提到了ThreadLocal,它并非线程,而是在线程中存储数据用的.数据存储以后,只能在指定的线程中获取到数据,对于其他线程来说是无法获取到数据的,也就是说ThreadLocal可以在多个线程中互不干扰地存储和修改数据.基于ThreadLocal的这一特点,那么当我们在开发中,需要将某些数据以线程作为作用域,并且不同线程具有不同的数据副本的时候,就可以考虑采用ThreadLocal了. Android的消息机制中也…
启动流程图   mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj\backtype\storm\daemon\ nimbus.clj 方法原型: 1  defnk mk-assignments [nimbus :scratch-topology-id nil]   方法说明: 参数nimbus为nimbus-data对象,scratch-topology-id为…