抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

教程来自我们的老朋友菜鸟

https://www.runoob.com/android/android-architecture.html

还有

https://juejin.cn/post/7090380760288821279

https://juejin.cn/post/7022624191723601928

一、Android 架构

Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。

Untitled

1 Linux内核

在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅长的工作,如网络和大量的设备驱动,从而避免兼容大量外围硬件接口带来的不便。

2 程序库

在 Linux 内核层的上面是一系列程序库的集合,包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等。

3 Android程序库

这个类别包括了专门为 Android 开发的基于 Java 的程序库。这个类别程序库的示例包括应用程序框架库,如用户界面构建,图形绘制和数据库访问。一些 Android 开发者可用的 Android 核心程序库总结如下:

  • android.app - 提供应用程序模型的访问,是所有 Android 应用程序的基石。
  • android.content - 方便应用程序之间,应用程序组件之间的内容访问,发布,消息传递。
  • android.database - 用于访问内容提供者发布的数据,包含 SQLite 数据库管理类。
  • android.opengl - OpenGL ES 3D 图片渲染 API 的 Java 接口。
  • android.os - 提供应用程序访问标注操作系统服务的能力,包括消息,系统服务和进程间通信。
  • android.text - 在设备显示上渲染和操作文本。
  • android.view - 应用程序用户界面的基础构建块。
  • android.widget - 丰富的预置用户界面组件集合,包括按钮,标签,列表,布局管理,单选按钮等。
  • android.webkit - 一系列类的集合,允许为应用程序提供内建的 Web 浏览能力。

看过了 Android 运行层内的基于 Java 的核心程序库,是时候关注一下 Android 软件栈中的基于 C/C++ 的程序库。

4 Android运行时

这是架构中的第三部分,自下而上的第二层。这个部分提供名为 Dalvik 虚拟机的关键组件,类似于 Java 虚拟机,但专门为 Android 设计和优化。

Dalvik 虚拟机使得可以在 Java 中使用 Linux 核心功能,如内存管理和多线程。Dalvik 虚拟机使得每一个 Android 应用程序运行在自己独立的虚拟机进程。

Android 运行时同时提供一系列核心的库来为 Android 应用程序开发者使用标准的 Java 语言来编写 Android 应用程序。

5 应用框架

应用框架层以 Java 类的形式为应用程序提供许多高级的服务。应用程序开发者被允许在应用中使用这些服务。

  • 活动管理者 - 控制应用程序生命周期和活动栈的所有方面。
  • 内容提供者 - 允许应用程序之间发布和分享数据。
  • 资源管理器 - 提供对非代码嵌入资源的访问,如字符串,颜色设置和用户界面布局。
  • 通知管理器 - 允许应用程序显示对话框或者通知给用户。
  • 视图系统 - 一个可扩展的视图集合,用于创建应用程序用户界面。

二、Android 应用程序组件

应用程序组件是一个Android应用程序的基本构建块。这些组件由应用清单文件松耦合的组织。AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互。

以下是可以在Android应用程序中使用的四个主要组件。

组件 描述
Activities 描述UI,并且处理用户与机器屏幕的交互。
Services 处理与应用程序关联的后台操作。
Broadcast Receivers 处理Android操作系统和应用程序之间的通信。
Content Providers 处理数据和数据库管理方面的问题。

1 Activities

一个活动标识一个具有用户界面的单一屏幕。举个例子,一个邮件应用程序可以包含一个活动用于显示新邮件列表,另一个活动用来编写邮件,再一个活动来阅读邮件。当应用程序拥有多于一个活动,其中的一个会被标记为当应用程序启动的时候显示。

一个活动是Activity类的一个子类,如下所示:

1
2
3
public class MainActivity extends Activity {

}

2 Services

服务是运行在后台,执行长时间操作的组件。举个例子,服务可以是用户在使用不同的程序时在后台播放音乐,或者在活动中通过网络获取数据但不阻塞用户交互。

一个服务是Service类的子类,如下所示:

1
2
3
public class MyService extends Service {

}

3 Broadcast Receivers

广播接收器简单地响应从其他应用程序或者系统发来的广播消息。举个例子,应用程序可以发起广播来让其他应用程序知道一些数据已经被下载到设备,并且可以供他们使用。因此广播接收器会拦截这些通信并采取适当的行动。

广播接收器是BroadcastReceiver类的一个子类,每个消息以Intent对象的形式来广播。

1
2
3
public class MyReceiver  extends  BroadcastReceiver {

}

4 Content Providers

内容提供者组件通过请求从一个应用程序到另一个应用程序提供数据。这些请求由ContentResolver类的方法来处理。这些数据可以是存储在文件系统、数据库或者其他其他地方。

内容提供者是ContentProvider类的子类,并实现一套标准的API,以便其他应用程序来执行事务。

1
2
3
public class MyContentProvider extends  ContentProvider {

}

三、主要文件结构

Untitled

这个文件夹负责保存应用程序的Manifest文件,查看主要应用程序的业务逻辑(Java/Kotlin)、可画文件(图像、矢量图)、应用程序的UI布局文件、mipmap(应用程序的图标文件)、颜色(应用程序的品牌颜色)、字符串(所有文本,用于本地化应用程序)、样式(应用程序的预定义或用户定义的样式)、应用程序级gradle文件(管理依赖性)。

Untitled

应用程序清单文件: 清单文件是我们应用程序的一个重要部分,因为它定义了我们应用程序的结构和元数据,它的组件,以及它的要求。该文件包括构成应用程序的每个活动、服务、内容提供商和广播接收器的节点,并使用意图过滤器和权限,确定它们如何相互协调和其他应用程序。

Untitled

res/values文件夹。 值文件夹用于存储许多Android项目中使用的资源值,包括颜色、样式、尺寸、填充值、边缘值等功能。在res/values文件夹下有4个主要文件。它们是:colors.xml, dimens.xml, strings.xml, styles.xml

Untitled

build.gradle文件。 Gradle是一个构建系统(开源),用于自动构建、测试、部署等。每个Android项目都需要一个Gradle来从项目中的.java和.xml文件生成apk。它位于项目根目录下,其主要功能是定义构建配置,这些配置将应用于项目的所有模块。

Assets 文件夹。 资产提供了一种在应用程序中添加任意文件的方法,如文本、XML、HTML、字体、音乐和视频。如果有人试图将这些文件作为 “资源 “添加,Android会将其纳入其资源系统,你将无法获得原始数据。

资源原始文件夹。 Android中的raw文件夹是用来保存mp3、mp4、sfb文件等。raw文件夹是在res文件夹内创建的:main/res/raw。因此,我们将简单地在res文件夹中创建它。

Untitled

Logcat窗口。 Logcat窗口是在应用程序运行时可以打印各种信息的地方。假设,你正在运行你的应用程序,而程序不幸崩溃了。那么,Logcat窗口将帮助你通过收集和查看仿真器抛出的所有信息来调试输出。

debug.keystore文件: 是最重要的文件之一,当我们从Google Play商店下载应用程序时,几乎每个应用程序都有这个文件。这个文件基本上被认为是任何应用程序的证书,每次都会被谷歌验证。

评论