自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 问答 (1)
  • 收藏
  • 关注

原创 ANR学习

ANR 是 Android 系统用于监控应用是否及时响应的关键机制。形象地说,如同设置定时炸弹场景:系统的中控系统(system_server 进程)启动倒计时,若应用进程在规定时间内未完成特定任务,中控系统将触发 ANR,采取杀进程等措施;反之,若应用按时完成任务并向中控系统报告,炸弹则被拆除。触发 ANR 后,中控系统会封装现场、抓取快照(traces),以便后续排查问题根源。

2025-02-12 21:16:51 684

原创 Input 系统启动

Input 系统作为上层软件系统,主要分为系统框架层和应用 App 层,两层各司其职,协同运作以实现流畅的人机交互。

2025-02-07 18:51:05 655

原创 Input 系统运作

这意味着如果前面的 InputStage 根据自身的业务逻辑判断能够处理(消费)该事件,并且决定拦截它,那么事件将如同遇到关卡的行人,终止在此处的传递,后面的 InputStage 就不会再接收到该事件,避免了不必要的资源浪费和重复处理。它独立运行于自己的线程之中,如同一个忙碌的车间主管,有条不紊地管理着输入设备列表,对系统连接的各类输入设备,无论是常见的触摸屏、键盘,还是相对小众的游戏手柄等,都了若指掌。而对于按键事件,系统则采取更为直接的策略,直接将目光锁定在当前拥有焦点的窗口上。

2025-02-07 18:50:53 1003

原创 WMS服务(安卓)

WMS是管理安卓窗口的JAVA框架层服务是衔接应用和SurfaceFlinger的中间层负责安卓窗口的显示和动画的呈现。

2025-02-06 14:49:38 346

原创 PMS服务(安卓)

PWS(Package Manager Service)它是 Android 系统中负责应用的核心。

2025-02-06 14:49:21 245

原创 三大服务间的关系(AMS、WMS、PMS)

的广播发出时,AMS(Activity Manager Service)会负责处理广播的分发。信息,而 AMS 在处理广播分发时会依赖 PMS 保存的这些信息来找到合适的广播接收器进行广播的分发和处理。AMS 拿到这些信息后,会根据这些信息创建相应广播接收器的实例,并调用其。广播时,AMS 会向 PMS 询问哪些应用的广播接收器监听了这个。的广播接收器的相关信息(如类名、所在应用包名等)返回给 AMS。标签),PMS 会提取广播接收器所监听的。综上所述,PMS 会保存静态广播的。类的实例,并调用它的。

2025-02-06 14:49:00 744

原创 Binder(黏合剂)

Binder译为中文为黏合剂,在安卓中可以将他理解为黏合两个进程的黏合剂,使得两个进程能够相互通信。

2025-01-28 14:59:00 426

原创 AMS服务(安卓)

安卓的 AMS 即 Activity Manager Service,是 Android 系统中的核心服务之一。

2025-01-28 14:58:46 544

原创 Zygote启动流程图

fork 操作会复制当前进程(包括线程)到子进程,但只复制当前线程。然而,在 fork 之后,子进程通常会执行与父进程不同的任务(如启动新的应用进程),此时 Binder 线程可能不再需要,甚至可能引发问题(如死锁或资源竞争)。而 Zygote 进程在系统启动时非常早地被创建,甚至在 ART 和 Biinder 驱动初始化之前。首先进程是内存私有的独立的。所以一个进程一个虚拟机,这个虚拟机管理当前进程,方便。init本身还要创建很多进程(很忙),并且虚拟机的创建也在zygote。一个进程对应一个虚拟机。

2025-01-28 14:58:26 264

原创 Android消息机制(餐厅运营模式)

在Android中,Looper、MessageQueue和Hander是相互协作的三个组件,它们共同构成了Android的消息处理机制。其实个人认为和餐厅运营模式很相似。

2025-01-26 12:44:19 317

原创 Intent(安卓的信使)

这个任务指定一个组件去执行,也只能它来执行。

2025-01-26 12:43:43 369

原创 Activity(软件堆栈)

activity是一个,拥有焦点能与用户交互的组件。

2025-01-26 12:41:23 187

原创 应用层(软件堆栈)

其中Activity(UI用户交互)、Service(后台计算)、Broadcast(组件之间、系统组件之间通讯方式)共同组成了应用的业务层,而Content Provider(底层数据统一封装)成为了数据访问层。当进程被杀掉后,系统会回复组件当时的状态,以便重写打开组件时回到原来的状态。安卓的四大组件,可以涵盖应用的一般三层架构模型,业务层、数据访问层、数据层。因为安卓内存有限,所以为了用户体验需要及时回收内存(杀进程)。系统会自动为组件创建进程,以便在不需要的时候回收。

2025-01-25 23:04:27 142

原创 Framework(软件堆栈)

是一个基于特定平台(如Windows、Linux等)的本地代码执行环境,它允许开发者使用该平台的原生API和系统调用来编写高性能、低延迟的应用程序。是一个为Java应用程序提供运行环境的框架,它包括了JVM(Java虚拟机)、Java核心类库和一些支持文件。JRE(Java Runtime Environment)是Java Runtime Framework的一个具体实现,它包含了JVM标准实现及Java核心类库。

2025-01-25 23:03:56 184

原创 Treble架构(解决碎片化问题)

在安卓8.0之前,设备制造商若要更新到新版的成本和难度非常高,导致安卓新版发布后更新率非常低。安卓系统的代码分为两大类,一类是谷歌维护原生的代码称为Android OS代码。另一类是芯片厂商和手机厂商定制的代码,也就是的代码也称为。在安卓8之前,因为HAL是以.so库的形式存在,与framework位于同一进程,导致任何更新都需重新编译、打包HAL层。所以framework与HAL同生共死的状态(耦合在一起)。

2025-01-25 23:03:23 870 1

原创 开机流程(安卓)

Init进程作为系统的第一个用户空间进程,负责孵化出多个关键的用户守护进程,如ueventd(用于处理设备节点事件)、logd(日志服务)、healthd(健康监控服务)、installd(安装服务)、adbd(Android调试桥服务)以及lmkd(低内存管理服务)等。Init进程还会挂载几个关键的文件系统,包括tmpfs(基于RAM的文件系统,用于存储临时数据)、procfs(提供系统信息的伪文件系统)和sysfs(反映内核对象层次结构的文件系统)。Init进程是用户空间的第一个进程。

2025-01-25 23:02:16 1020

原创 Linux Kernel(软件堆栈)

值得注意的是,设备驱动不一定就必须是硬件相关的,有时候我们会创建虚拟的驱动(软驱动)来扩展Kernel的功能。但是这种调用输入比较底层的API使用起来比较繁琐,为了减轻开发者负担,系统会在用户空间提供一个。机制和策略按照不同的时间尺度变化的,但策略变化远远快于机制。把所有的硬件以及资源,抽象成文件。两大原则使得内核与用户空间有比较松的。通过对文件的操作,就可驱动对应设备。用户空间运行的是Android的。(封装了这些底层系统调用)。主要划分几个大的模块。,就是为了与内核空间通讯。文件接口来操作这些资源。

2025-01-23 12:45:43 253

原创 硬件抽象层(软件堆栈)

Android将硬件驱动一分为二。一部分在,另一部分在在用户空间这部分硬件驱动就叫硬件抽象层(HAL)。为什么安卓要一分为二?因为Linux Kernel是开源的,但是你如果在Kernel里加东西,你加的东西也要开源。那么作为企业,为了自身Kernel的独特性和机密性就要想办法避开这个问题。解决办法就是,将硬件驱动实现内容仍然放在Kernel并提供访问接口,但具体怎么才能访问就要通过硬件抽象层。这里硬件抽象层因为以及不属于Linux Kernel,所以厂商可以不开源。

2025-01-23 12:45:25 366

原创 启动模式(安卓)

Download组合键:电源+音量上+音量下。不开放给用户使用,只在芯片厂商和手机厂商内部使用。可以给整个手机分区进行写入。Fastboot(线刷)组合键:电源+音量上。现在基本上手机厂商都禁用了(考虑安全),需要权限解锁(BL锁),可以去手机官方申请。可以对Normal和Recover下用到的分区进行写入。Recovery(卡刷)组合键:电源+音量下。可以对系统进行以及清除数据等。具有独立的Linux系统。

2025-01-22 12:45:19 228

原创 软件堆栈(安卓)

Android OSLinux Kernel主要负责管理硬件(cpu、内存)直接与硬件交互。也通过硬件抽象层(HAL)给上层,来让上层使用硬件。Linux Kernel以上的软件层叫用户空间硬件抽象层(HAL)对下层Linux驱动进行封装,为上层提供简单的接口,隐藏底层硬件复杂性。就像一个中介一样。某些厂商只需按照HAL标准接口来开发硬件驱动,那么就能跑安卓系统。系统运行库层。

2025-01-22 00:10:56 338

原创 分区结构(安卓软件原生)

设备启动后首先进入该区域,用于执行硬件检测等操作,并引导系统启动。它根据开机时的按键组合等条件选择启动模式,如 Android 系统、Recovery 模式、Fastboot 模式等。例如,通过电源键和特定按键组合可进入 Recovery 模式进行恢复出厂设置等操作。包含 Android 系统的内核和 RAM Disk。当 Boot Loader 选择启动 Android 系统时,会从该分区加载内核并启动相关的系统服务和程序,完成系统的初始化。存放 Android 系统的应用程序、库文件、框架等核心组件。包

2025-01-22 00:10:42 218

原创 BroadcastReceiver(广播接收器)

BroadcastReceiver是Android中用于接收和系统或应用的组件。广播机制在安卓中是用于跨应用跨进程的一种通信方式。体现在电量低、网络状态变化等。体现在不同模块的消息传递。

2025-01-20 20:01:22 376

原创 Service(幕后工作者)

service是安卓的后台组件,用于不需要与用户交互的情况下长时间运行的任务,比如后台下载文件。

2025-01-19 14:07:31 419 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除