当前位置:   article > 正文

Android软件架构_android soa

android soa

前言

本篇文章只是简单解答一下安卓的软件架构,是我在学习中的一个笔记,如果有内容错误,欢迎评论指正,如果有更好的资料也欢迎大家一起分享~

正文

首先看一下Android软件架构的框图,对于框图中库的作用都放进去了,当然库可能不完整,可以下面这篇文章:代码目录https://blog.csdn.net/weixin_39723405/article/details/90199453https://blog.csdn.net/weixin_39723405/article/details/90199453当然还包含了SOA的部分内容,详细可以看下面两篇文章:SOAhttps://mp.weixin.qq.com/s/vFHw3U3ESJs_16x6e2kctghttps://mp.weixin.qq.com/s/vFHw3U3ESJs_16x6e2kctgSOA背景介绍https://mp.weixin.qq.com/s/rSgiu4tEzY9l6WDQHrqB5whttps://mp.weixin.qq.com/s/rSgiu4tEzY9l6WDQHrqB5w

Android软件架构如下:

 软件架构主要包含了五层,分别是应用程序层、应用程序框架层、运行库层、硬件抽象层和操作系统内核层。

 针对其中几个知识点做一个简要的说明

1、Framework 是在应用层之下,用来支持应用层,Framework层预制在设备上,开发时,可以随意使用;

2、Android的运行环境由系统库(core libraries)和虚拟机组成,每个APP都运行在一个系统进程里,每个系统进程都是一个虚拟机,虚拟机运行DEX文件,一般android会用dx工具把JVAV文件转换为DEX文件;

3、Core libraries是源于Java的运行库,在Java库里重写了Java的东西,组织架构;

4、HAL硬件抽象层一般是在用户空间,规定了模块的命名规范和动态共享库的存放路径规范,抽象层不放在Linux内核空间是因为用户空间是可以不公开源代码,但Linux内核是要公开源代码;

5、binder是IPC是进程通信的一种,因为内核间的进程是相互隔离的,需要通信,binder的IPC通信,拷贝只需1次,仅次于共享,该通信的框架明确稳定,为每个APP分配UID,来识别进程身份,更安全,防止各种APP偷窥数据;

接下来是一些我自己不懂的知识点整理:

线程与进程的区别?

1、每个APP运行都会占用一个进程,每个进程中至少包括一个线程;

2、资源分配给进程,同一个进程的所有线程都会共享该进程的所有资源;

3、真正在处理机上运行的是线程,线程运行中需要使用计算的内存资源和CPU;

4、进程间的通信方式(IPC):①管道(pipe);②信号(signal);③消息队列(message queue);④共享内存(shared memory);⑤信号量(semaphore);⑥套接字(socket);

5、多线程间的通信采用:①等待/通信机制(基于wait和notify方法);②Volatile(可见性让线程间通信);③join方式(线程调用后按顺序有序执行);④threadLocal(单线程内部通信)。
 

SOA理解?

1、SOA是基于AP(adaptive) AUTOSAR提出面向服务的中间层概念,这里需要说一下AP与CP(classic)  AUTOSAR的区别:

芯片类型不同:AP:运行在64bit的高性能处理器(MPU)、CPU等中,如瑞萨的H3,英伟达的Xavier等。除此之外,AP 也可以运行在虚拟硬件上;CP运行在8bit、16bit、32bit的微控制器(MCU)中,如英飞凌的TC3xx,瑞萨的RH850等;

芯片算力:AP:运行算力高于20000DMIPs的芯片上,CP算力低于1000DMIPs;

OS:AP:是POSIX OS

POSIX OS说明https://blog.csdn.net/weixin_33788244/article/details/86400142https://blog.csdn.net/weixin_33788244/article/details/86400142

CP:基于OSEK标准

OSEK OS 与CP Autosar OShttps://zhuanlan.zhihu.com/p/71005662https://zhuanlan.zhihu.com/p/71005662

通信方式:AP:支持以太网IPC、RPC等,CP:CAN、LIN、Flexray,CP也可以支持SOME/IP,但是CP中SOME/IP只不过是把Sender-Receiver的CAN通信转换成了Client-Server的以太网通信,整个通信链路仍是静态配置的,并不是真正的面向服务的通信,所以不会说CP是SOA,而只说AP是SOA;

安全等级:AP可达到ASILB(但不局限于),CP可达到ASILD等级;

OTA:AP可以进行OTA,CP常用于ECU间的通信,用于静态配置,自身无法进行OTA,

传输速率:AP传输速率ms级,CP传输速率达到μs级;

应用场景:AP应用于对实时性有一定要求、对功能安全有一定要求,对算力要求较高的场景,如传感器融合动态实时更新,自动驾驶中与云服务器,交融设备通信等,CP一般应用在对实时性要求高、对功能安全要求高、对算力要求较低的场景中,如制动系统等

总的来说,在软件架构中,AP是向上的接口,CP是向下的接口,两者相互补充,共同作用。

2、SOA分为基础中间层和专用中间层,基础中间层是以原子服务封装,并提供标准化接口,原子服务是基于功能定义的(并不是软件或者硬件层级),原子服务是稳定的,不易变的,原子服务要完成硬件端口、网络信号还有外围器件的抽象,原子服务可包括诊断信息(I/O、器件、信号等诊断),原子服务之间是低耦合的,例如门锁开服务,门锁关服务,车窗关服务,车窗开服务;

3、专用中间层是将原子服务进行组合,且是独立执行的,如门锁服务,车窗服务等。

 Android runtime虚拟机?

1、虚拟机分为ART和Dalvki,其中Dalvki在Android4.4版本以下使用,ART(Android Runtime)在Android4.4版本以上使用;

2、Dalvki采用JIT(just in time Compiler)技术,ART采用AOT(Ahead Of Time)技术;

3、JIT就是即时编译技术,在Java开发Android,编译打包APK文件会经历以下流程:

 Dalvik虚拟机负责将DEX文件解码为机器码,即在每一次APP运行时,都需要进行译码工作,使得运行速度慢,Google是加入了JIT编译器,编译了运行较多的DEX文件为本地机器码;

4、AOT已经彻底取代了JIT,在第一次安装APK时,字节码会预先编译成机器码,将DEX文件编译为oat文件,让他变成本地应用,在APP真正运行时,不再额外编译,直接就读取oat文件,提高运行速度,但是这样APK在安装时,需要更大的存储空间,通常是代码包的20%空间,安装时间变长。

结尾

多多指正,有好的资料期待你的分享。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/262177
推荐阅读
相关标签
  

闽ICP备14008679号