Android系统的结构层次及界面布局

和其它系统一样,Android系统也分了框架。Android系统分为5层,从高到低分别是应用程序层、应用程序框架层、系统运行库层、硬件抽象层和Linux内核层,各层采用软件栈的方式进行构建。

Android软件栈是通过一个应用程序框架提供了Linux内核和C/C++库的集合,在运行时为应用程序提供相应的服务,并对其进行管理。

1. 应用层(System Apps)

系统内置的应用程序以及非系统级的应用程序都属于应用层,负责与用户进行直接交互,通常都是用Java进行开发的。

2. 应用框架层(Java API Framework)

应用框架层为开发人员提供了开发应用程序所需要的API,我们平常开发应用程序都是调用这一层所提供的API,当然也包括系统应用。这一层是由Java代码编写的,可以称为Java Framework。

下面来看这一层所提供的主要组件:

名称

功能描述

Activity Manager(活动管理器)

管理各个应用程序生命周期,以及常用的导航回退功能

Location Manager(位置管理器)

提供地理位置及定位功能服务

Package Manager(包管理器)

管理所有安装在Android系统中的应用程序

Notification Manager(通知管理器)

使得应用程序可以在状态栏中显示自定义的提示信息

Resource Manager(资源管理器)

提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等

Telephony Manager(电话管理器)

管理所有的移动设备功能

Window Manager(窗口管理器)

管理所有开启的窗口程序

Content Provider(内容提供者)

使得不同应用程序之间可以共享数据

View System(视图系统)

构建应用程序的基本组件

3. 系统运行库层

从Android系统框架图上可以看出,系统运行库层分为两部分,分别是 C/C++ 程序库和 Android 运行时库,下面分别进行介绍:

(1)C/C++程序库

名称

功能描述

OpenGL ES

3D绘图函数库

Libc

从BSD继承来的标准C系统函数库,专门为基于嵌入式Linux的设备定制

Media Framework

多媒体库,支持多种常用的音频、视频格式录制和回放。

SQLite

轻型的关系型数据库引擎

SGL

底层的2D图形渲染引擎

SSL

安全套接层,是为网络通信提供安全及数据完整性的一种安全协议

FreeType

可移植的字体引擎,它提供统一的接口来访问多种字体格式文件

(2)Android运行时库

运行时库又分为核心库和ART(5.0系统之后,Dalvik虚拟机被ART取代)。核心库提供了Java语言核心库的大多数功能,这样开发者可以使用Java语言来编写Android应用。相较于JVM,Dalvik虚拟机是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代Dalvik虚拟机的ART 的机制与Dalvik 不同。在Dalvik下,应用每次运行的时候,字节码都需要通过即时编译器转换为机器码,这会拖慢应用的运行效率,而在ART 环境中,应用在第一次安装的时候,字节码就会预先编译成机器码,使其成为真正的本地应用。

4. 硬件抽象层(HAL / HIDL)

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化,为了保护硬件厂商的知识产权,它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。通俗来讲,就是将控制硬件的动作放在硬件抽象层中。

5. Linux内核层

Android 的核心系统服务基于Linux 内核,在此基础上添加了部分Android专用的驱动。系统的安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。

  • 界面布局:

Android中有六种布局,分别为RelativeLayout(相对布局)、LinearLayout(线性布局)、FrameLayout(帧布局)、TableLayout(表格布局)、 GridLayout(网格布局管理器)、ConstraintLayout(约束布局)

一. RelativeLayout相对布局

该布局是通过相对位置的方式指定该布局内子控件的位置,以父容器或者其他子组件为参照物,指定布局中子控件的位置。

RelativeLayout 是一个功能非常强大的界面设计实用工具,因为它可以消除嵌套视图组并使布局层次结构保持扁平化,从而提高性能。如果您发现自己使用了多个嵌套的 LinearLayout 组,只需用一个 RelativeLayout 就可以替换它们。

二. LinearLayout线性布局

该布局可通过android:orientation属性指定该布局内的子控件水平和竖直排列。

线性布局内的控件不换行or换列,组件依次排列,超出容器的控件则不会被显示

三. FrameLayout帧布局

该布局会在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧,这些帧会一个一个叠加在一起,后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中的所有控件会与左上角对齐。

在activity_main.xml文件中用FrameLayout标签来定义帧布局管理器。

四. TableLayout表格布局

采用行、列的形式来管理控件。他通常搭配TableRow布局使用,一个TableRow代表一行,在TableRow中添加的控件代表一列。

在TableLayout布局中,列的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度取决于父容器的宽度

五. GridLayout网格布局

GridLayout网格布局管理器是android 4.0 以后才增加的布局管理器

六. ConstraintLayout约束布局

约束布局ConstraintLayout 是一个ViewGroup,可以在Api9以上的Android系统使用它,它的出现主要是为了解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。从 Android Studio 2.3 起,官方的模板默认使用 ConstraintLayout。

约束布局ConstraintLayout使用起来比相对布局RelativeLayout更灵活,性能更出色!还有一点就是ConstraintLayout可以按照比例约束控件位置和尺寸,能够更好地适配屏幕大小不同的机型。

界面布局编写方式

1、在XML文件中编写布局

有效地将界面中的布局代码和Java代码隔离,使程序的结构更加清晰

RelativeLayout继承自ViewGroup,TextView继承自View

2、在Java代码中编写布局

在Android中所有布局和控件的对象都可以通过new关键字创建出来,将创建的View空间添加到ViewGroup布局中,从而实现View空间在布局界面中显示

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值