Android AMS
文章平均质量分 92
该专栏主要对Android AMS模块基础功能和相关源码分析。源码部分主要以Android 12为主。
优惠券已抵扣
余额抵扣
还需支付
¥39.90
¥99.00
购买须知?
本专栏为图文内容,最终完结不会低于15篇文章。
订阅专栏,享有专栏所有文章阅读权限。
本专栏为虚拟商品,基于网络商品和虚拟商品的性质和特征,专栏一经购买无正当理由不予退款,不支持升级,敬请谅解。
c小旭
Android Framework车载智能座舱开发工程师
展开
-
Android AMS——进程优先级更新(二十)
AMS 中的 updateOomAdjLocked 方法实现了进程优先级的动态更新。每个等级的进程又有对应的优先级,使用oom_adj值来表示,进程回收机制就是根据这个adj值来进行的 前台进程adj值最低,代表进程优先级最高,空进程adj值越高,最容易被kill,对于相等优先级的进程:使用的内存越多越容易被杀死。原创 2024-03-19 08:46:59 · 245 阅读 · 0 评论 -
Android AMS——进程LRU列表更新(十九)
AMS对进程的管理主要体现在两个方面:进程LRU列表动态更新:动态调整进程在mLruProcesses列表的位置进程优先级动态调整:实际是调整进程oom_adj的值。这两项调整和系统进行自动回收有关,当内存不足时,系统会关闭一些进程来释放内存,下面就依据这两方面来看下 AMS 是如何管理进程的。原创 2024-03-19 08:46:30 · 281 阅读 · 0 评论 -
Android AMS——进程管理(十八)
Android AMS 的进程管理主要涉及以下几个方面:进程创建:当需要启动一个应用程序时,AMS 会负责创建该应用的进程。进程创建是根据应用的包名和启动组件信息进行的。创建进程时,AMS会为其分配一个唯一的进程 ID 和进程运行时环境。进程分配:AMS 根据不同的应用和组件属性,为每个应用分配不同的进程优先级。进程分配的优先级包括前台进程、可见进程、服务进程和后台进程等。原创 2023-10-18 20:35:15 · 298 阅读 · 0 评论 -
Android AMS——优先级内存回收(十七)
updateOomAdjLocked() 方法用于在 Android 系统中动态调整应用程序的优先级和内存使用权重。在Android系统中,OOM(Out-of-Memory)管理器负责根据系统内存使用情况,决定哪些进程在内存不足时被终止以释放内存。OnTrimMemory 的主要作用就是指导应用程序在不同的情况下进行自身的内存释放,以避免被系统直接杀掉,提高应用程序的用户体验。原创 2023-10-18 20:16:19 · 294 阅读 · 0 评论 -
Android AMS——全局内存回收(十六)
trimApplications() 方法用于底层系统中的全局内存回收。它会遍历整个应用程序列表,检测不活动的应用程序,并主动关闭这些应用程序,释放它们占用的内存资源。该函数的目的是通过释放不再使用的应用程序所占用的内存空间,从而提高整个系统的性能和稳定性。它可以通过以下几种方式来实现内存回收:关闭不活动的应用程序:当应用程序处于后台运行或者长时间没有与用户交互时,它们被认为是不活动的。trimApplications() 函数可以检测到这些不活动的应用程序,并将它们关闭,释放它们所占用的内存空间。原创 2023-10-14 14:10:10 · 199 阅读 · 0 评论 -
Android AMS——停止和结束Activity清理(十五)
processStoppingAndFinishingActivities 方法在 Android 系统中负责处理正在停止和结束的Activity。在Android系统中,当一个 Activity 被标记为停止状态(stopped)时,它不再可见,但是系统仍然保留该 Activity 的状态和资源,以便在需要时能够快速恢复。然而,当系统内存紧张需要回收内存时,processStoppingAndFinishingActivities() 函数会被调用,用于处理这些已停止的 Activity。原创 2023-10-12 20:01:25 · 240 阅读 · 0 评论 -
Android AMS——内存回收机制(十四)
Android AMS 的内存回收机制主要涉及以下几个方面:Low Memory Killer(LMK):这是 Android 系统中的一个重要组件,用于监测系统内存使用情况并根据一定的策略杀死进程以释放内存。LMK 在系统内存不足时,会根据优先级和内存使用情况决定杀死哪些进程,从而释放内存资源。优先级分类:AMS将应用根据其重要性和用户体验分为不同的优先级,如前台进程、可见进程、服务进程和后台进程。根据优先级,AMS在内存不足时会更倾向于杀死优先级较低的进程,以保证前台进程和用户正在交互的进程的运行。原创 2023-10-12 16:34:21 · 335 阅读 · 0 评论 -
Android AMS——栈管理详解(十三)
首先,Activity 启动,分为两个类型,从 Activity 中的启动,和非 Activity 中的启动。这两种发动,决定了启动流程中的 resultTo 是否存在,即源 Activity 的 ActivityRecord。目标 Activity 的启动栈核算,取决于它的启动形式,即最终的 mFlag,还有源 Activity 的栈。原创 2023-10-11 20:56:44 · 313 阅读 · 0 评论 -
Android AMS——创建任务栈(十二)
在了解栈的创建之前,我们还要知道 Activity 的启动模式,有过 APP 开发经验的朋友对这个应该多少有些了解。我们再来简单回顾一下。原创 2023-10-11 13:12:21 · 337 阅读 · 0 评论 -
Android AMS——栈管理基础(十一)
Android AMS(Activity Manager Service)是Android系统中负责管理应用程序生命周期和任务栈的重要服务。通过 AMS,系统可以管理应用程序的启动、切换、销毁和任务栈等操作。其中,Activity 栈管理是AMS的核心功能之一。Android 的 Activity 栈是用来管理应用程序中各个 Activity 实例的,它采用栈的数据结构,遵循后进先出(LIFO)的原则。当一个 Activity 启动时,它会被放入栈顶;当一个 Activity 被销毁时,它会从栈中移除。原创 2023-10-10 18:03:43 · 337 阅读 · 2 评论 -
Android AMS——Activity暂停流程(十)
在前面的文章中,对于已启动的应用,在启动新的 Activity 时,调用到 resumeTopActivityInnerLocked() 方法会先调用 startPausingLocked 暂停前一个 Activity,再启动新的 Activity。这里我们就看以下 Activity 的暂停流程。原创 2023-10-08 20:57:59 · 230 阅读 · 0 评论 -
Android AMS——APP启动流程(九)
调用 Activity 的 startActivity 方法来启动目标 Activity。接着就会调用到 Instrunmentation 的 execStartActivity 方法,通过获取 ATMS 的 binder 代理对象,然后调用到 ATMS 的 startActivity 中去。原创 2023-10-08 16:53:57 · 354 阅读 · 0 评论 -
Android AMS——应用启动Activity(八)
上一篇文章在创建 Application 后还调用了 ActivityTaskManagerInternal 的 attachApplication 方法去启动 Activity,启动 Activity 的流程我们从这里开始分析。原创 2023-09-27 11:19:01 · 712 阅读 · 0 评论 -
Android AMS——应用创建Application(七)
前面已经分析了进程的创建流程,最后启动了 ActivityThread 类 main 的方法,接下来开始创建该应用对应的 Application。原创 2023-09-26 17:31:03 · 349 阅读 · 0 评论 -
Android AMS——应用进程孵化过程(六)
上一篇文章最后说了,ZygoteServer 会在系统启动的时候,创建一个 Socket 服务端,用于接收客户端的 fork 请求。ZygoteServer 在初始化结束后,会调用 runSelectLoop() 方法,用于处理客户端的消息。当客户端请求 fork 进程时,runSelectLoop() 方法会转交给 ZygoteConnection 类的 processCommand() 方法去处理。原创 2023-09-26 13:13:43 · 281 阅读 · 0 评论 -
Android AMS——应用进程创建流程(五)
经过前两篇的内容才梳理完桌面进程启动的准备工作,这一篇才开始 Launcher 进程的真正启动历程。接上一篇,在 ActivityTaskSupervisor 中会判断进程是否存在,如果进程不存在,则会创建进程,执行 startProcessAsync() 方法。如果进程存在,则执行 realStartActivityLocked() 方法。在 Launcher 的启动时,进程是不存在的。所以我们先来分析一下进程不存在的情况。原创 2023-09-25 17:08:45 · 470 阅读 · 0 评论 -
Android AMS——应用进程创建准备(四)
上一篇文章介绍了 Launcher 的前期准备工作,这里我们继续分析 Launcher 进程的启动启动流程。原创 2023-09-25 14:35:11 · 438 阅读 · 1 评论 -
Android AMS——Launcher启动前期(三)
上一篇文章介绍了 SystemSever 启动 AMS 的流程。最后,当引导服务、核心服务、其他服务都完成后,会调用AMS中的 systemReady() 方法,告知 AMS 可以执行第三方代码,这篇文章我们接着分析。原创 2023-09-25 11:23:24 · 311 阅读 · 0 评论 -
Android AMS——AMS初始化(二)
Android AMS 也是一个系统服务,属于系统服务中的引导服务,在 startBootstrapServices() 方法中启动。这里我们就来看一下 ActivityManagerService 的启动流程。原创 2023-09-23 16:45:27 · 417 阅读 · 0 评论 -
Android AMS——概述(一)
1、Activity生命周期管理Activity 生命周期是指在 Android 应用中,一个 Activity 从创建到销毁的整个过程。了解 Activity 生命周期非常重要,因为它涉及到应用的状态变化、内存管理以及用户交互等方面。onCreate()当 Activity 第一次创建时,系统会调用onCreate()方法。在这个阶段,可以进行一些初始化工作,例如设置布局、绑定数据等。一般来说,该方法执行完后,Activity 会进入 "Created" 状态。onStart()原创 2023-09-22 15:33:40 · 1665 阅读 · 0 评论