【Android面试八股文】Android系统架构【一】

Android系统架构图

1.1 安卓系统启动

1.设备加电后执行第一段代码:Bootloader

系统引导分三种模式:fastboot,recovery,normal:
fastboot模式:用于工厂模式的刷机。在关机状态下,按返回+开机 键进入此模式
recovery模式:用于工程模式的刷机。按 home+开机 键进入此模式
normal模式:正常开机

2.Bootloader初始化CPU和硬件

3.Bootloader装载操作系统映像或者固化的嵌入式应用程序到内存中

4.跳到操作系统的空间,启动操作系统运行

5.Bootloader启动内核和init进程,init进程并发出更多用来处理底层硬件的守护进程

6.init进程启动"Ztgote"进程。接着它启动第一个VM,用来预加载Android的framework和APP需要的通用资源。然后开启一个Socket来监听请求,基于预加载的VM孵化出一个新的VM创建一个新的进程

7.init进程启动"runtime"进程,它启用超级管理进程---System Server。接着SystemServer启动所有系统核心服务,如ActivityManager Service,硬件相关的Service等。

8.操作系统启用第一个App进程---Home进程

1.2 安卓应用启动分析

1  每个应用都是在单独的进程中,被系统分配一个唯一的user id。
2  一个进程,由一个主线程+多条子线程组成。主线程中有一个Looper实例,通过Looper.loop()队列从Message队列中取出Message来做相应的处理。
3  Android的系统界面基本都是由一些Activity组成,在Android系统里,Activity全部放在ActivityStack里管理。而ActivityStack是由ActivityManagerService内部管理的

APP的启动流程:
1  点击应用程序图标,Launcher调用startActivity(intent)
系统启动后,会启动系统应用和用户应用,而Launcher就是一个系统应用,也是有单独的进程

2  Launcher通过Binder IPC机制, 调用到ActivityManagerService
进程与进程直接使用Binder机制来开启应用


3  ActivityManagerService收集intent 信息,验证权限
3.1  第一步通过PackageManager的resolveIntent()收集这个intent对象的指向信息

3.2  指向信息被存储在一个intent对象中

3.3  下通过grantUriPermissionLocked()方法来验证用户是否有足够的权限去调用该intent对象指向的Activity

3.4  如果有权限, ActivityManagerService会检查并在新的task中启动目标activity

4  开启进程,打开应用的LaunchActivity
检查这个进程的ProcessRecord是否存在,如果ProcessRecord是null, ActivityManagerService会创建新的进程来实例化目标activity

创建进程的过程:

1  ActivityManagerService调用startProcessLocked()方法来创建新的进程

2  startProcessLocked方法会通过socket通道传递参数给Zygote进程. Zygote孵化自身, 并调用ZygoteInit.main()方法来实例化ActivityThread对象并最终返回新进程的pid
3  ActivityThread随后依次调用Looper.prepareLoop()和Looper.loop()来开启消息循环

4  将进程和指定的Application绑定。ActivityThread对象中调用bindApplication()方法,该方法发送一个BIND_APPLICATION的消息到
消息队列中, 最终通过handleBindApplication()方法处理该消息, 然后调用makeApplication()方法来加载App的classes到内存中

5  application的进程已存在,现在就是从一个已经存在的进程中启动一个新进程的activity。先是调用realStartActivity(),该方法调用application线程对象中的sheduleLaunchActivity()发送一个LAUNCH_ACTIVITY消息到消息队列中,handleLaunchActivity()会处理该消息,最后调用LaunchActiivity的onCreate来创建界面


1.3 图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/77960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jvm-获取方法签名的方法

在Java中,获取方法签名的方法可以通过以下几种方式实现,具体取决于你的需求和使用场景。以下是详细的介绍: 1. 使用反射 API Java 提供了 java.lang.reflect.Method 类来获取方法的相关信息,包括方法签名。 示例代码&#xff1a…

DeepSeek和Excel结合生成动态图表

文章目录 一、前言二、3D柱状图案例2.1、pyecharts可视化官网2.2、Bar3d-Bar3d_puch_card2.3、Deepseek2.4、WPS2.5、动态调整数据 一、前言 最近在找一些比较炫酷的动态图表,用于日常汇报,于是找到了 DeepseekExcel王牌组合,其等同于动态图…

探索 .bat 文件:自动化任务的利器

在现代计算机操作中,批处理文件(.bat 文件)是一种简单而强大的工具,它可以帮助我们自动化重复性任务,工作效率提高。尽管随着编程语言和脚本工具的发展,.bat 文件的使用频率有所下降,但它依然是…

PyTorch与自然语言处理:从零构建基于LSTM的词性标注器

目录 1.词性标注任务简介 2.PyTorch张量:基础数据结构 2.1 张量创建方法 2.2 张量操作 3 基于LSTM的词性标注器实现 4.模型架构解析 5.训练过程详解 6.SGD优化器详解 6.1 SGD的优点 6.2 SGD的缺点 7.实用技巧 7.1 张量形状管理 7.2 广播机制 8.关键技…

【C++】特殊类的设计、单例模式以及Cpp类型转换

📚 博主的专栏 🐧 Linux | 🖥️ C | 📊 数据结构 | 💡C 算法 | 🌐 C 语言 上篇文章: C 智能指针使用,以及shared_ptr编写 下篇文章: C IO流 目录 特殊类的设…

探索 Flowable 后端表达式:简化流程自动化

什么是后端表达式? 在 Flowable 中,后端表达式是一种强大的工具,用于在流程、案例或决策表执行期间动态获取或设置变量。它还能实现自定义逻辑,或将复杂逻辑委托…… 后端表达式在 Flowable 的后端运行,无法访问前端…

【Lua】Lua 入门知识点总结

Lua 入门学习笔记 本教程旨在帮助有编程基础的学习者快速入门Lua编程语言。包括Lua中变量的声明与使用,包括全局变量和局部变量的区别,以及nil类型的概念、数值型、字符串和函数的基本操作,包括16进制表示、科学计数法、字符串连接、函数声明…

符号速率估计——小波变换法

[TOC]符号速率估计——小波变换法 一、原理 1.Haar小波变换 小波变换在信号处理领域被成为数学显微镜,不同于傅里叶变换,小波变换可以观测信号随时间变换的频谱特征,因此,常用于时频分析。   当小波变换前后位置处于同一个码元…

android contentProvider 踩坑日记

写此笔记原因 学习《第一行代码》到第8章节实现provider时踩了一些坑,因此记录下来给后来人和自己一个提示,仅此而已。 包含内容 Sqlite数据库CURD内容provider界面provider项目中书籍管理provider实现逻辑用adb shell确认providercontentResolver接收…

Eureka、LoadBalance和Nacos

Eureka、LoadBalance和Nacos 一.Eureka引入1.注册中心2.CAP理论3.常见的注册中心 二.Eureka介绍1.搭建Eureka Server 注册中心2.搭建服务注册3.服务发现 三.负载均衡LoadBalance1.问题引入2.服务端负载均衡3.客户端负载均衡4.Spring Cloud LoadBalancer1).快速上手2)负载均衡策…

【开关电源】关于GaN反激电源开关噪声

文章目录 0 前言1 设计信息1.1 设计需求1.2 原理图1.3 电源表现 2 原因分析3 横向对比TI UCG28826 (GaN)采购的普通QR反激变换器 4 总结 0 前言 笔者原计划设计一款省电的,效率尚可的,稳定的2路输出反激电源,用于系统…

DOCA介绍

本文分为两个部分: DOCA及BlueField介绍如何运行DOCA应用,这里以DNS_Filter为例子做大致介绍。 DOCA及BlueField介绍: 现代企业数据中心是软件定义的、完全可编程的基础设施,旨在服务于跨云、核心和边缘环境的高度分布式应用工作…

mybatis mapper.xml中使用枚举

重点:application.propertis配置类 #TypeEnumHandler 这个类的包名,不是全路径 mybatis.type-handlers-packagecom.fan.test.handler两个枚举类: public enum StatusEnum {DELETED(0),ACTIVE(1);private final int code;StatusEnum(int cod…

鸿蒙生态:鸿蒙生态校园行心得

(个人观点,仅供参考) 兄弟们,今天来浅浅聊一聊这次的设立在长沙的鸿蒙生态行活动。 老样子,我们先来了解一下这个活动: Harmon&#x…

【速写】多LoRA并行衍生的一些思考

迁移学习上的一个老问题,怎么做多领域的迁移?以前的逻辑认为领域迁移属于是对参数做方向性的调整,如果两个领域方向相左,实际上不管怎么加权相加都是不合理的。 目前一些做法想着去观察LoRA权重矩阵中的稠密块与稀疏块&#xff0…

【Delphi 基础知识 44】接口interface的应用

目录 1. 前言2. 接口有哪些优势2.1. 实现多态性2.2 实现多重(解决单继承限制)2.3 解耦代码(依赖注入)2.4 便于测试(模拟接口)2.5 跨语言互操作性(COM支持)1. 前言 总结为一句话就是:接口只告诉你要做什么,而类会告诉你应该怎么做 下面是最简单的接口实现 typeIMyIn…

09.传输层协议 ——— TCP协议

文章目录 TCP协议 谈谈可靠性TCP协议格式 序号与确认序号窗口大小六个标志位 确认应答机制(ACK)超时重传机制连接管理机制 三次握手四次挥手 流量控制滑动窗口拥塞控制延迟应答捎带应答面向字节流粘包问题TCP异常情况TCP小结基于TCP的应用层协议 TCP协…

NLP高频面试题(五十一)——LSTM详解

长短期记忆网络(LSTM)相较于传统循环神经网络(RNN)的核心改进在于通过引入记忆单元(cell state)和门机制(gating mechanism)来有效缓解梯度消失与梯度爆炸问题,从而更好地捕捉长距离依赖关系 。在其网络结构中,信息通过输入门(input gate)、遗忘门(forget gate)和…

SpringCloud组件—Eureka

一.背景 1.问题提出 我们在一个父项目下写了两个子项目,需要两个子项目之间相互调用。我们可以发送HTTP请求来获取我们想要的资源,具体实现的方法有很多,可以用HttpURLConnection、HttpClient、Okhttp、 RestTemplate等。 举个例子&#x…

无需花钱购买域名服务器!使用 VuePress + Github 30分钟搭建属于自己的博客网站(保姆级教程)

前言 GitHub Pages 提供免费全球加速的服务器资源,VuePress 将 Markdown 变成艺术品级的网页,仅需 30 分钟,你便可以像提交代码一样发布文章,过程完全免费。 博客搭建好的效果如下:https://honorsong.github.io/exam…