当前位置: 首页 > news >正文

Android 系统框架

启动流程

init 进程启动过程

Android系统启动流程

Zygote启动流程及源码分析

APP启动流程

init进程是Android用户空间第一个进程,主要做以下3件事情:

  • 创建和挂载启动所需的文件目录。
  • 初始化和启动关键服务,守护关键服务。
  • 解析init.rc配置文件,并启动Zygote进程。
  1. 简述Android系统启动流程?
  • 按电源键开机,从ROM加载预制程序启动BootLoader。
  • Bootloader启动Linux内存Kernel,并启动第一个用户空间进程init。
  • init进程创建挂载文件目录,加载属性服务,解析init.rc文件启动Zygote进程。
  • Zygote进程,启动虚拟机,注册JNI服务,预加载系统资源(系统类,字体、资源文件、SO库、Chromium动态库)。创建Socket服务,fork出system_server进程,
  • system_server进程启动AMS、WMS、PMS等系统服务。
  • Zygote进入轮询监听AMS启动应用请求。
  • AMS启动Launcher。
  1. system_server 为什么要在 Zygote 中启动,而不是由 init 直接启动呢?
  • Zygote 作为孵化器,可以提前加载一些资源,当fork出子进程,子进程就会拥有这些进程。
  • system_server进程需要JNI函数、共享库、常用类、以及主题资源资源,在init进程中是没有的。
  1. 为什么要专门使用 Zygote 进程去孵化应用进程,而不是让 system_server 去孵化呢?
  • system_server进程包含AMS、WMS等系统服务,在应用进程中是不需要的。
  • fork操作仅会把调用线程拷贝到子进程,可能会导致死锁。
  1. 描述下是怎么导致死锁的?
  • fork操作复制整个用户空间(copy-on-write策略)以及所有系统对象,然后只复制当前线程到子线程,其他线程蒸发掉了。
  • 当某个线程获取了某个锁,锁会被复制进子进程,在子进程看,锁没有所有者没法解锁,程序发生死锁。
  1. Zygote 为什么不采用 Binder 机制进行 IPC 通信?
  • 先后时序问题,binder需要注册到ServiceManager,Zygote使用binder不能保证创建binder时ServiceManager初始化完成。
  • binder支持多线程操作,可能出现死锁。
  • binder拷贝问题,binder是成对存在的,分为Client端和服务端,fork出应用进程,不能释放无用binder对象,占用内存。
  • LocalSocket效率也很高,而且有权限验证能保证进程通信安全。
  • Socket fork后,应用进程可以关闭。

Android AMS(ATMS)

Android 的AMS是什么
Android AMS源码解析

Android WMS

Activity创建到View的显示过程

Android PMS

PMS(PackageManagerService) 原理

PMS处理APK的复制

相关文章:

Android 系统框架

启动流程 init 进程启动过程 Android系统启动流程 Zygote启动流程及源码分析 APP启动流程 init进程是Android用户空间第一个进程,主要做以下3件事情: 创建和挂载启动所需的文件目录。初始化和启动关键服务,守护关键服务。解析init.rc配…...

【Hystrix技术指南】(3)超时机制的原理和实现

[每日一句] 也许你度过了很糟糕的一天,但这并不代表你会因此度过糟糕的一生。 [背景介绍] 分布式系统的规模和复杂度不断增加,随着而来的是对分布式系统可用性的要求越来越高。在各种高可用设计模式中,【熔断、隔离、降级、限流】是经常被使…...

MySQL: Failed to Connect to MySQL at XXXX:3306 with user root

客户端连接MySQL服务器,报错: 解决方案: 没有让root用户远程登录,需要设置; 进入MySQL服务器,修改一下 # mysql -h localhost -uroot -P3306 -p12345678 mysql: [Warning] Using a password on the comm…...

《大型网站技术架构设计》第二篇 架构-性能

不同视角下的网站性能 1、用户 从用户角度,网站性能就是用户在浏览器上直观感受到的网站响应速度快还是慢。用户感受到的时间。 2、开发人员 开发人员关注的主要是应用程序本身及其相关子系统的性能,包括响应延迟、系统吞吐量、并发处理能力、系统稳定…...

谷歌推出AI模型机器人RT2 将文本和图像输出为机器人动作

去年年底,ChatGPT火遍全球,全世界都见识了大语言模型的强大力量。人们对大模型不再陌生,开始使用基于大模型的应用绘画、作图、搜索资料、设计剧情等,而妙用不止于此。谷歌推出了Robotics Transformer 2(RT2),这是一个…...

常见的服务器安全管理漏洞

常见的服务器安全管理漏洞 企业信息化技术的应用,以不可逆转。随着文件服务器、ERP管理软件等等在企业中生根发芽,应用服务器也逐渐在企业中普及起来。以前在企业中有一台应用服务器已经是了不起的事情,现在有两台、三台的,也不为…...

JavaScript高级:探索作用域链的神秘面纱

在 JavaScript 的编程世界中,作用域是一种控制变量可访问性和生命周期的机制。而作用域链则是闭包的关键所在,它使得函数在创建时捕获并保存了外部作用域的变量,为 JavaScript 增添了更多的魔力。本文将深入探讨作用域链的概念和作用&#xf…...

mysql数据库如何转移到oracle

mysql数据库转移到oracle 在研发过程中,可能会用到将表数据库中的表结构及数据迁移到另外一种数据库中, 比如说从mysql中迁移到oracle中, 常用的方法有好些,如下 1、使用powerdesigner,先连接mysql然后生成mysql的p…...

nnU-Net 终极指南

一、说明 了解最先进的nnU-Net以及如何将其应用于您自己的数据集所需的一切。使用nnU-Net,这是语义图像分割中非常强大的基线。在本指南中,您将: 对nnU-Net的主要贡献进行简要概述。了解如何将 nnU-Net 应用于您自己的数据集。 但是&#xff…...

ubuntu 安装 python

ubuntu 安装 python 初环境与设备查询是否安装安装python 本篇文章将介绍ubuntu 安装 python 初 希望能写一些简单的教程和案例分享给需要的人 环境与设备 系统:ubuntu 查询是否安装 因为系统也许会自带一个python,所以验证一下,如果自…...

【腾讯云 Cloud studio 实战训练营】云端 IDE 构建移动端H5

🐱 个人主页:不叫猫先生,公众号:前端舵手 🙋‍♂️ 作者简介:2022年度博客之星前端领域TOP 2,前端领域优质作者、阿里云专家博主,专注于前端各领域技术,共同学习共同进步…...

Kubernetes 之 Kubeadm 搭建

Kubeadm 搭建 一、搭建准备1.1 环境准备1.2 所有节点安装docker1.3 所有主机安装 cri-dockerd1.4 所有节点安装kubeadm,kubelet和kubectl1.5 部署K8S集群1.6 设定kubectl1.7 部署 Dashboard 一、搭建准备 master(2C/4G,cpu核心数要求大于2&a…...

Qt应用开发(基础篇)——堆栈窗口 QStackedWidget

一、前言 QStackedWidget继承于QFrame,QFrame继承于QWidget,是Qt常用的堆栈窗口部件。 框架类QFrame介绍 QStackedWidget堆栈窗口,根据下标切换,一次显示一个小部件,常用于应用界面切换、图片轮询播放等场景。 二、QSt…...

浅谈测试开发岗位

一、测试开发的概念与需求 测试开发,通常也被称为自动化测试,是一个涵盖了从测试设计、开发、执行和结果分析等一系列活动的职位。在软件开发的生命周期中,测试开发起着至关重要的作用,其主要目标是确保软件的质量和性能达到预期…...

典型移动APP安全风险提醒

研究背景 随着互联网和移动设备的发展,手机已成为人人都拥有的设备,各式各样的App更是丰富了人们的生活:从社交到出行、从网购到外卖,从办公到娱乐等,App已成为大众生活必需品。然而,App的流行使人们对App…...

多平台发布文章-项目总结

做个最近的AIGC内容创作技术要点的总结吧😼 流程图 时序图...

什么是IoC?什么是Spring IoC?什么是DI?

首先说明 IoC 是一种思想,IoC的全称是Inversion of Control,翻译成中文叫做“控制反转” 用人话来说,IoC的思想就是将一个对象对另一个对象的控制权交出去(不必关心交给谁),从而让对象之间的依赖关系降低&…...

分布式任务调度平台XXL-JOB学习笔记-helloworld运行

环境:win10 eclipse java17 mysql8.0.17 xxl-job 2.4 源码:https://github.com/xuxueli/xxl-job/ 导入时按Existing Maven Projects导入,先导入xxl-job-admin(管理平台)和xxl-job-executor-sample-springboot&#x…...

维护工程师提升设备管理水平的5个技巧

维护在工业工厂中扮演着至关重要的角色,而在这一关键领域,维护工程师发挥着关键作用。无论是混合还是离散自动化产线,设备的正常运行和保养对于确保生产的持续性至关重要。为了实现高效、成功的维护,维护工程师需要采取一系列方法…...

解码大众全新数字高尔夫8汽车CAN FD行驶功能电气架构

据在大众原厂的伙伴介绍,全新数字高尔夫8将在11月上市销售,目前高尔夫8在行驶功能电气架构上采用的CAN FD,在多媒体这一块采用的以太网,后续估计大部分类似同样MQBEvo平台的车型均会复制升级过来,那么,未来…...

Pharma Agent:从文档 QA 到智能监管合规助手

一、起因 去年秋天,我们的 RA(法规事务)团队在准备一个 IND 申请,涉及某小分子靶向药的临床前安全性综述。团队里有个同事叫小林,她需要在 FDA 的 2000 多页 guidance document 里找到关于"杂质阈值"的具体条款,同时对比 ICH Q3A 和 Q3B 的差异。 她给我发消…...

React Context 状态共享机制

React Context 状态共享机制是React框架中用于跨组件层级传递数据的核心方案。在复杂的应用场景中,组件间状态共享常因层层传递props导致代码冗余,而Context通过提供全局状态管理,显著简化了这一过程。本文将深入探讨其核心特性、使用场景及优…...

【GUI-Agent】阶跃星辰 GUI-MCP 解读---()---HITL(Human In The Loop)邪

插件化架构 v3 版本最大的变化是引入了模块化插件系统。此前版本中集成在核心包里的原生功能,现在被拆分成独立的插件。 每个插件都是一个独立的 Composer 包,包含 Swift 和 Kotlin 代码、权限清单以及原生依赖。开发者只需安装实际用到的插件&#xff0…...

Input Leap:一套键鼠控制多台电脑的终极解决方案

Input Leap:一套键鼠控制多台电脑的终极解决方案 【免费下载链接】input-leap Open-source KVM software 项目地址: https://gitcode.com/gh_mirrors/in/input-leap 你是否曾在多台电脑之间频繁切换,每次都要伸手去拿不同的键盘和鼠标&#xff1f…...

次元画室Keil5嵌入式开发趣味应用:为代码生成项目标识图

次元画室Keil5嵌入式开发趣味应用:为代码生成项目标识图 每次新建一个STM32项目,是不是总觉得少了点什么?项目文件夹里,除了那些.c、.h文件和工程配置,总感觉冷冰冰的,缺乏一点个性。README文档也是干巴巴…...

终极指南:如何让Mac外接鼠标获得触控板般丝滑滚动体验

终极指南:如何让Mac外接鼠标获得触控板般丝滑滚动体验 【免费下载链接】Mos 一个用于在 macOS 上平滑你的鼠标滚动效果或单独设置滚动方向的小工具, 让你的滚轮爽如触控板 | A lightweight tool used to smooth scrolling and set scroll direction independently f…...

如何快速掌握GDScript:从零开始的游戏开发编程指南

如何快速掌握GDScript:从零开始的游戏开发编程指南 【免费下载链接】learn-gdscript Learn Godots GDScript programming language from zero, right in your browser, for free. 项目地址: https://gitcode.com/gh_mirrors/le/learn-gdscript 想要进入游戏开…...

s2-pro镜像免配置优势:无需conda环境,开箱即用TTS服务

s2-pro镜像免配置优势:无需conda环境,开箱即用TTS服务 1. 平台简介 s2-pro 是 Fish Audio 开源的专业级语音合成模型镜像,它让文本转语音(TTS)服务变得前所未有的简单。与传统的语音合成方案不同,这个镜像最大的特点就是开箱即用…...

【2026年携程暑期实习- 4月12日-第四题- 数字分裂求和】(题目+思路+JavaC++Python解析+在线测试)

题目内容 给定一个初始值为 nnn 的数字。 每一秒,当前所有的数字都会同时执行分裂操作: 记分裂的数字为 xxx,它会分裂成两个数字:⌊x/2⌋+1⌊x/2⌋+1...

别再数据线了!用FastAPI 分钟搭个局域网文件+剪贴板神器茄

为 HagiCode 添加 GitHub Pages 自动部署支持 本项目早期代号为 PCode,现已正式更名为 HagiCode。本文记录了如何为项目引入自动化静态站点部署能力,让内容发布像喝水一样简单。 背景/引言 在 HagiCode 的开发过程中,我们遇到了一个很现实的问…...