Android系统中的进程管理

Android进程管理2—ADJ算法与系统资源调度的深度联动 本文深入解析Android进程管理中的ADJ算法及其与系统资源调度的深度联动。ADJ算法作为Android系统的资源调度指挥官,通过动态优先级评分机制协调进程管理,影响内存回收、CPU调度等关键系统行为。文章详细介绍了ADJ值的计算逻辑、与SchedGroup的联动机制以及优化应用保活能力的实用策略,帮助开发者更好地理解和利用ADJ算法提升应用性能。 阅读详情

首先Android以Linux内核为基础,所以进程的管理都离不开Linux本身的机制。因此我们需要知道系统打开App的完整过程。

1.app_process:一个可执行程序,是启动zygote和system_server进程的程序

2.Zygote:所以应用程序的父进程,系统的重要进程

3.ActivityManager:am(缩写)是辅助Android四大组件的管理,并且还掌握了所有应用程序进程的创建和进程的优先级管理

init进程

他是一切的开始,在Android系统中,所有进程的进程号都不确定,唯独init进程的进程号一定是1。

以上就是关于framework工作的大致流程。

在四大组件中的任何一个先起来都会导致应用程序的创建。

Activity

在应用程序中,我们会通过startActivity(Intent intent),startService(Intent service),sendBroadcase(Intent intent),ContentResolver打开的ContentProvider,当然还有一些其他的重载方法。在这里提到的所有方法,最终都是通过Binder调用到ActivityManagerService中,尤其进行处理的。并且应用进程与ActivityManagerService所在进程是相互独立的,两者之间的方法通常是不能之间互相调用的。而Android系统中,专门提供了Binder框架来提供进程间通讯和方法调用的能力。



在ActivityManagerService中,对每一个运行中的Activity都有一个ActivityRecord对象与之对应,这个对象记录Activity的详细状态。

Activity的启动背景:

ActivityManagerService中通过Stack和Task来管理Activity

每一个Activity都属于一个Task,一个Task可能包含多个Activity。一个Stack包含多个Task

ActivityStackSupervisor类负责管理所有的Stack

Activity的启动过程会牵涉到:Intent的解析、Stack,Task的查询或创建、Activity进程的创建、Activitiy窗口的创建、Activity的生命周期调度


在Activity启动的最后,会将前一个Activity pause,将新启动的Activity resume以便被用户看到。


在这个时候,如果发现新启动的Activity进程还没有启动,则会通过startSpecificActivityLocked将其启动。

Service

Service的启动相对与Activity来说要简单一些。

在ActivityManagerService中,对每一个运行中的Service都有一个ServiceRecord对象与之对应,记录Service的详细状态。

Provider

在ActivityManagerService中,对每一个运行中的ContentProvider都有一个ContentProviderRecord对象与之对应,来记录其详细状态。

我们通过ContentResolver中的insert、delete、update、query的API来使用ContentProvider。在ContentResolver的实现中,无论使用这里的哪个接口,ContentResolve都会先通过acquireProvider这个方法来获取到一个类型为IContentProvider的远程接口。这个远程接口对接了ContentProvider的实现提供方。

同一个ContentProvider可能同时被多个模块使用,而调用ContentResolver接口的进程只是ContentProvider的一个客户端而已,真正的ContentProvider提供方是运行自身的进程中的,两个进程的通讯需要通过Binder的远程接口形式来调用。如图:


Receiver

广播是一种一对多的消息形式,广播接收者的数量不确定。因此发送广播本身可能是一个很耗时的过程(因为要逐个通知)。

在ActivityManagerService内部是通过队列的形式来管理广播的:BroadcaseQueue(描述了一个广播队列)、BroadcaseRecord(描述了一个广播事件)。

在ActivityManagerService中,如果收到了一个发送广播的请求,会先创建一个BroadcaseRecord接着将其放入BroadcaseQueue中。然后通知队列自己去处理这个广播。然后ActivityManagerService自己就可以继续处理其他请求了。

广播队列本身是在另一个线程处理广播的发送的,这样保证的ActivityManagerService主线程的负载不会太重。

探索Android与操作系统进程管理 本文深入探讨了Android系统的架构、进程和线程管理,以及操作系统中的并发控制概念。从Dalvik虚拟机到Linux内核,从多线程模型到死锁预防策略,本文揭示了这些技术在Android系统中的应用与重要性。 阅读详情

相关推荐

Android系统中的进程管理:进程的创建

对于操作系统来说,进程管理是其最重要的职责之一。考虑到这部分的内容较多,因此会拆分成几篇文章来讲解。本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建。本文适合Android平台的应用程序开发者,也适合对于Android系统内部实现感兴趣的读者。Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。例如:1.通过fork来创建进行2.通过信号量来管理进程3.通过proc文件系统来查询和调整进程状态等对于Android来说,进程管理的主要内容包括以下几个部分内容:1.进程的创建2.进程的优先级管理3.进程的内存管理4.进程的回收和死亡处

android:app_process两种用法

(1)app_process是用来干嘛的? app_process可以在Android启动独立的Java进程(Main应用程序)(2)在什么情况下,可以启动Java进程呢? a. 利用adb shell启动的Java进程,这种情况下Java进程拥有shell级别的权限,所以Java程序对应的PID和Shell的PID一样。 b.利用app启动的Java进程,这种情况下Java进程跟当前app的

玩出品 1万+

DC算法竞赛——北京PM2.5浓度回归分析

北京PM2.5浓度回归分析 比赛结果(118/1150) 一. 概述 1、项目来源:https://www.dcjingsai.com/static_page/cmpList.html 2、给定数据字段如下: 3、使用方法:回归算法 4、目的:预测北京pm2.5值,使平均预测误差越小越好。 二、分析过程 setwd("E:/R数据源") #读入数据 data <- read.csv('p...

玻璃球的博客 3475

Android 源码分析 - 系统 - app_process

App_process用来启动Android runtime。 源代码位于:frameworks/base/cmds/app_process。 Zygote、SystemServer其实都是app_process 进程。 app_process的命令行参数分为四部分: 传给虚拟机,所有直到“--” 或者不是“-”开头的参数 父目录,在虚拟机参数后的第一个参数,目前没有使用 内部参数,一到多个 --zygote 使用孵化器模式启动 --start-system-...

luansxx的专栏 1137

c++ mysql_init 返回无效指针_C++操作MYSQL遇到的一些问题

首先 我使用的是 vcpkg上面是我装的一些库《大大安利vcpkg 安装时一定要使用powershell进行编译装上vcpkg后装ligmariadb这个库,这个对Mysql操作还是挺方便的,然后说一下 在装库时碰到的一些问题1.网络问题1.参考了一下 github上的答案 将下载失败的url拷下来 自己下 然后再重新开始安装《vcpkg在安装时每一个需要下载的 都会提供url-仔细找,2.这个问...

weixin_32176627的博客 681

模拟量传输4-20ma电流

大家可能会非常熟悉RS232,RS485,CAN等工业上常用的总线,他们都是传输数字信号的方式。那么,我们用什么方式来传输模拟信号呢?工业上普遍需要测量各类非电物理量,例如温度、压力、速度、角度等,这些都需要转换成模拟量电信号才能传输到几百米外的控制室或显示设备上。工业上最广泛采用的是用4~20mA电流来传输模拟量。 采用电流信号的原因是不容易受干扰,因为工业现场的噪声电压的幅度可能达到数V,但是噪声的功率很弱,所以噪声电流通常小于nA级别,因此给4-20mA传输带来的误差非常小;电流源内阻趋于无穷.

tangdongming的博客 1万+

Android 使用app_process 创建进程

我们知道,Android 中 app 主进程和其他进程都是 Zygote 的子进程,那么 app_process 启动的进程又是怎么的呢?对于用户而言,我们一般都是 --application 模式启动,影响进程父进程的主要因素和用户相关。在Android中,app进程创建的任何进程UID是一样的在Android中,app使用app_process是需要shell进程创建的,但shell进程的UID依然可以传递,即便shell被kill之后,托孤到init进程的进程依然保持原有UID。

嘴巴吃糖了 3256

OpenAI Codex 国内安装配置全攻略:从零到实战的 AI 编程助手集成指南

AI 编程助手正成为提升开发效率的关键工具,其核心原理是基于大规模语言模型对代码语义进行深度理解与生成。这类技术通过将自然语言指令转化为可执行的代码、自动化重构与调试,为开发者提供了智能化的结对编程体验,其技术价值在于显著降低编码复杂度、加速项目迭代。在实际应用场景中,AI 编程助手可集成于日常开发流,辅助完成代码生成、项目分析与自动化任务。本文聚焦于 OpenAI 的 Codex,针对国内开发者在网络、认证和配置上的常见挑战,提供了涵盖多种安装方式、详细配置步骤及核心使用技巧的实战指南,并特别介绍了如何利

weixin_28715081的博客 416

Android系统中的进程管理:进程的优先级

本文是Android进程管理系列文章的第二篇,会讲解进程管理中的优先级管理。 进程管理的第一篇文章:《进程的创建》请跳转至这里。 本文适合Android平台的应用程序开发者,也适合对于Android系统内部实现感兴趣的读者。 前言 进程的优先级反应了系统对于进程重要性的判定。 在Android系统中,进程的优先级影响着以下三个因素: 当内存紧张时,系统对于进程的

omnispace的博客 1万+

AI预测彩票,使用chatgpt和lstm神经网络(文末附源码)

AI预测彩票,使用chatgpt和lstm神经网络(文末有彩蛋)

淘淘小窝 1万+

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

深入Android 【五】 —— 任务和进程

<br />任务、进程和线程<br />关于Android中的组件和应用,之前涉及,大都是静态的概念。而当一个应用运行起来,就难免会需要关心进程、线程这样的概念。在Android中,组件的动态运行,有一个最与众不同的概念,就是Task,翻译成任务,应该还是比较顺理成章的。<br />Task的介入,最主要的作用,是将组件之间的连接,从进程概念的细节中剥离出来,可以以一种不同模型的东西进行配置,在很多时候,能够简化上层开发人员的理解难度,帮助大家更好的进行开发和配置。<br />任务<br />在SDK中关于

iris0123456的专栏 702

喷涂机器人系列编程:ABB IRB 5500_(9).常见故障诊断与排除

ABB IRB 5500 喷涂机器人在实际应用中可能会遇到各种故障,但通过系统的诊断和排除方法,可以确保生产线的连续运行。定期维护和保养是预防故障的重要手段,而操作培训和规范则能有效减少人为因素引起的故障。希望本节内容能帮助操作和维护人员提高故障诊断和排除的效率,确保喷涂机器人的稳定运行。如果您有任何疑问或需要进一步的帮助,请联系 ABB 客户服务中心。

zhubeibei168的博客 1045

android系统进程管理,Android系统中的进程管理

> Android系统中的进程管理:进程的创建--http://qiangbo.space/2016-10-10/AndroidAnatomy_Process_Creation/对于Android来说,进程管理的主要内容包括以下几个部分内容:进程的创建进程的优先级管理进程的内存管理进程的回收和死亡处理在应用程序中,开发者通过:startActivity(Intent intent) 来启动A...

weixin_26908317的博客 759

高通SA8295P音频接口深度解析:全面掌握SA8295P的LS-I2S、PCM/TDM与高性能音频处理技术设计

SA8295P提供丰富的音频接口选项,包括LS-I2S、PCM/TDM和HS-I2S接口,具备灵活的配置选项,适合各种高保真音频和高速数据传输应用。结合LS-I2S和PCM/TDM接口:在复杂的音频编解码器设计中,可结合使用LS-I2S和PCM/TDM接口,以处理和传输不同的音频数据流。使用HS-I2S接口:在软件定义无线电(SDR)系统中,高速I2S接口可处理高速数据流,如无线电信号的解码和处理。LS-I2S(低速I2S)接口是SA8295P的一部分,提供了丰富的音频数据传输选项。

weixin_43199439的博客 1410

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

技术文章 | Android系统中的进程管理:进程的创建

对于操作系统来说,进程管理是其最重要的职责之一。 考虑到这部分的内容较多,因此会拆分成几篇文章来讲解。 本文是进程管理系统文章的第一篇,会讲解Android系统中的进程创建。 本文适合Android平台的应用程序开发者,也适合对于Android系统内部实现感兴趣的读者。

CS13522431352的博客 363

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

深入了解Android系统的进程管理机制

通过掌握进程优先级与调度、内存管理、IPC机制以及多进程应用管理等关键技术点,可以有效提升应用性能和稳定性,满足面试官的严格要求,并在实际项目中展现自己的技术实力。应替换为实际要启动的应用包名。:对于涉及多进程的应用,面试官会关注开发者如何管理不同进程间的通信、资源共享和数据同步,以及如何避免潜在的问题。:针对当前进程管理机制存在的问题和不足,提出自己的改进建议或优化方案,展现自己的创新思维和问题解决能力。:不仅仅停留在表面现象的描述上,而是深入分析进程管理机制的原理和内部实现,展现自己的技术深度和广度。

2401_84909321的博客 923

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

系统学习 Android 的 进程管理、内存管理、音频管理

层层深入,并结合实践。,最终能独立分析 Android 系统级问题。要系统学习 Android 的。

zhanyahuiv5的博客 1414

Android 系统开发指北(三) - 进程管理之进程的创建

Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。例如: 通过fork来创建进行 通过信号量来管理进程 通过proc文件系统来查询和调整进程状态 等 对于Android来说,进程管理的主要内容包括以下几个部分内容: 进程的创建 进程的优先级管理 进程的内存管理 进程的回收和死亡处理 本文会专门讲解进程的创建,其余部分将在后面的文章中讲解。

话唠扇贝的博客 1372

Android 系统开发指北(四) - 进程管理之进程的优先级

进程的优先级反应了系统对于进程重要性的判定。 在Android系统中,进程的优先级影响着以下三个因素: 当内存紧张时,系统对于进程的回收策略 系统对于进程的CPU调度策略 虚拟机对于进程的内存分配和垃圾回收策略 本文会主要讲解系统对于进程优先级的判断依据和计算方法。

话唠扇贝的博客 970

Android(私有,公有)进程,系统中的进程管理

Android中有多种进程:前台进程,可见进程,服务进程,后台进程,空进程。 -- Android将进程分为6个等级,它们按优先级顺序由高到低依次是:  1.前台进程( FOREGROUND_APP)  2.可视进程(VISIBLE_APP )  3. 次要服务进程(SECONDARY_SERVER )  4.后台进程 (HIDDEN_APP)  5.内容供应节点(CONTENT_PROVIDE...

ShareUs的专栏 2011

android私有进程和,Android(私有,公有)进程,系统中的进程管理

Android中有多种进程:前台进程,可见进程,服务进程,后台进程,空进程。-- Android将进程分为6个等级,它们按优先级顺序由高到低依次是:1.前台进程( FOREGROUND_APP)2.可视进程(VISIBLE_APP )3. 次要服务进程(SECONDARY_SERVER )4.后台进程 (HIDDEN_APP)5.内容供应节点(CONTENT_PROVIDER)6.空进程(EMPT...

weixin_39632057的博客 645

Android系统的进程管理(创建->优先级->回收)

Android系统以Linux内核为基础,所以对于进程的管理自然离不开Linux本身提供的机制。通过fork来创建进行通过信号量来管理进程通过proc文件系统来查询和调整进程状态 等进程的创建进程的优先级管理进程的内存管理进程的回收和死亡处理本文会专门讲解进程的创建,其余部分将在后面的文章中讲解。进程的优先级反应了系统对于进程重要性的判定。当内存紧张时,系统对于进程的回收策略系统对于进程的CPU调度策略虚拟机对于进程的内存分配和垃圾回收策略。

Android系统优化 1970

Android 系统开发指北(五) - 进程管理之内存的回收

对于内存回收,主要可以分为两个层次: 进程内的内存回收:通过释放进程中的资源进行内存回收 进程级的内存回收:通过杀死进程来进行内存回收 这其中,进程内的内存回收主要分为两个方面: 虚拟机自身的垃圾回收机制 在系统内存状态发生变化时,通知应用程序,让开发者进行内存回收 而进程级的内存回收主要是依靠系统中的两个模块,它们是: Linux OOM Killer LowMemoryKiller 在特定场景下,他们都会通过杀死进程来进行内存回收。

话唠扇贝的博客 1344
上一篇: 关于Android世界观
下一篇: 半年的回顾
羊羊爱代码
博客等级 码龄11年 8粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值