Android架构的最新理解-----基于Android11

前言

网上对于Android架构的描述大多过于抽象,生涩难懂,层级划分不够清晰,而且关于安卓的介绍过于老旧,对应现在的安卓版本无法使用,自己开发过程是使用的Android11,为了方便自己开发,记录自己学习过程中的问题和理解。

本人为驱动开发,对于安卓应用层的程序不关注,故很多不讨论,主要研究安卓应用层之下的。

层级

在这里插入图片描述

这是Android官网上的层级图,说实话,感觉这个图可能不适合新手,因为很多的层级具有两段性,先入为主的层级图会影响大家的理解,大家最主要的是看文字介绍,然后自己构建层级图

HAL(Hardware Abstraction Layer)

HAL即硬件抽象层,是Android系统中位于最底层的一个组件,主要负责硬件相关功能的抽象和封装,为上层的软件提供统一的硬件访问接口。在HAL中,包含了与硬件设备相关的驱动程序和库,它们将底层硬件的操作和控制抽象化,使得不同硬件厂商的设备可以在Android系统上被统一地管理和访问。

linux的外设驱动都属于HAL层,例如wifi、触摸、显示、喇叭等驱动,此外HIDL也属于HAL层。

HAL的主要作用包括:

  • 提供与硬件设备相关的抽象接口,与设备无关的上层代码通过这些接口来访问硬件设备。
  • 将硬件相关接口的实现细节封装起来,隐藏底层硬件的差异性,从而提高系统的可移植性。
  • 管理着设备的初始化、配置、数据传输等功能,为上层应用提供标准化的访问接口。

Native层

Native层是Android系统中介于Framework层和底层硬件之间的一层,它主要包括了一些用C/C++编写的系统库和运行时环境,如libc、libm、libstdc++等。Native层通常运行在Linux内核之上,提供了一些底层服务和系统调用接口,同时也为Java层提供了部分功能的支持。

wifi的wpa_supplicant就属于native层。

Native层的重要作用包括:

  • 提供了Android系统底层应用的支持,如文件操作、网络通信、内存管理等。
  • 负责与底层硬件通信,包括驱动程序的加载、设备控制等。
  • 为Android系统提供了更高的性能,在某些对性能要求较高的场景下,开发者可以通过Native层进行优化。

Framework层

Framework层是Android系统的核心部分之一,位于HAL之上,也是手机应用开发的关键所在。Framework层包含了各种核心服务和系统组件,如Activity Manager、Content Provider、View System等,它们提供了应用开发者和用户之间的桥梁,实现了Android系统的各种功能。

Framework层的主要功能包括:

  • 提供各种系统组件和服务,如Activity生命周期管理、资源管理、通知管理等。
  • 定义了应用程序框架和开发模式,包括四大组件(Activity、Service、BroadcastReceiver、ContentProvider)等。
  • 实现了各种系统服务,如电话服务、WIFI服务、位置信息服务等,为应用提供底层支持

ART

安卓的ART(Android Runtime)是安卓操作系统中的一种运行时环境,用于执行应用程序的字节码。在安卓 5.0(Lollipop)及以后的版本中,ART取代了之前的运行时环境Dalvik虚拟机,成为默认的运行时环境。

以下是一些关于安卓的ART的特点和功能:

  1. AOT编译和Ahead-of-Time预编译:与Dalvik采用的JIT(Just-In-Time)编译不同,ART引入了AOT(Ahead-of-Time)编译。ART在应用安装时会将应用的字节码转换为本地机器码,这样可以提高应用的运行速度,减少应用运行时的性能开销。
  2. 垃圾回收优化:ART还对垃圾回收机制进行了优化,引入了更加高效的垃圾回收算法和机制,进一步提高了系统的性能和稳定性。
  3. 支持多种ABI架构:ART支持多种架构的处理器,包括ARM、MIPS、x86等,使得应用可以在不同类型的设备上运行和兼容。
  4. 内存管理改进:ART引入了更好的内存管理机制,包括更低的内存占用和更好的内存分配策略,提高了系统的稳定性和性能。
  5. 更好的应用兼容性:ART对新的Java语言特性和API做了更好的支持,使得开发者可以更好地利用新功能和更新的API。

简言之,ART取代了之前的JAVA虚拟机,现在的JAVA虚拟机可以理解为就是ART。

如果你看到了这里,觉得文章写得不错就给个赞呗?
更多Android进阶指南 可以扫码 解锁更多Android进阶资料


在这里插入图片描述
敲代码不易,关注一下吧。ღ( ´・ᴗ・` )

使用android studio 运行,下面是一个简单的文档,这个代码是一个demo 一、Activity的使用 1、SNActivity 框架最基本的activity,可调用$(SNManager)进行操作activity,具体用法请参考文档或代码 2、SNNavigationSlidingActivity 包含SNActivity的功能,继承于com.jeremyfeinstein.slidingmenu.lib.app.SlidingActivity 支持导航条和左滑视图的Activity 加载导航条: loadNavBar(int height,int background_color_id) loadNavBarResId(int height_id,int background_id) 加载左侧视图: /** * load left view * @param left_id left layout id * @param offset_value offset value * @param shadow_width_value shadow width value * @param shadow_drawable_id shadow drawable style * @param fade fade value */ loadLeft(int left_id, int offset_value, int shadow_width_value, int shadow_drawable_id, float fade) /** * load left view * @param left_id left layout id * @param offset_id offset id * @param shadow_width_id shadow width id * @param shadow_drawable_id shadow drawable id * @param fade fade value */ loadLeftResId(int left_id, int offset_id, int shadow_width_id, int shadow_drawable_id, float fade) 二、SNElement的使用 View的伪装对象,支持所有View的功能,详细功能可参考文档或代码 手动伪装:$.create $.id $.findView 注入伪装:$.setContent(view class or layout id,inject class); 获取原型:elem.toView(); 三、注入 1、视图注入 A、创建注入类,属性名称必须和layout中的id对应,如果不对应请加入标签@SNInjectView class DemoInject{ @SNInjectView(id=R.id.tvTest) public SNElement test; } B、实例化注入对象 DemoInject di=new DemoInject(); C、调用$.inject或者$.setContent注入 $.inject(di); D、注入成功后即可调用对象 String text=di.test.text(); 2、依赖注入 A、需要绑定注入对象,建议写到Application中的onCreate SNBindInjectManager.instance().bind(ITest.class, Test.class); B、与视图注入不同的是属性必须添加标签@SNIOC,注入的对象(Test)必须包含只有一个SNManager参数的构造函数,且必须实现注入者 public class Test implements ITest{ SNManager $; public Test(SNManager _$){ this.$=_$; }; } class DemoInject{ @SNIOC public ITest test; } C、调用$.inject或者$.setContent注入 同视图注入 D、注入成功后即可调用对象 di.test.xxx(); 四、fragment的使用 1、SNFragment 2、SNLazyFragment 五、控件的使用 1、SNFragmentScrollable 2、SNPercentLinearLayout、SNPercentRelativeLayout 3、SNScrollable 4、SNSlipNavigation 5、XList 6、slidingtab
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值