使用 Kotlin 进行 Android 编程
by Pierre-Olivier Laurence, Amanda Hinchman-Dominguez, G. Blake Meike, Mike Dunn
第 3 章 安卓基础知识
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
本书的前两章是对 Kotlin 语言的旋风式回顾。本章将回顾我们使用 Kotlin 的环境:Android。
与 Windows 和 MacOS 不同,Android 是基于 Linux 的操作系统,就像 Ubuntu 和 Red Hat 一样。但与 Ubuntu 和 Red Hat 不同的是,Android 针对移动设备(尤其是电池供电的移动设备)进行了大量优化。
其中最重要的优化涉及应用程序的含义。特别是,正如我们将要看到的,Android 应用程序与网络应用程序的共同点要远远多于我们熟悉的桌面应用程序。
不过,我们稍后会讨论这个问题。首先,我们来详细了解一下 Android 环境。我们将把操作系统看作一个堆栈--就像一层蛋糕。
安卓堆栈
图 3-1 展示了观察安卓系统的一种方式:组件堆栈。堆栈中的每一层都有特定的任务并提供特定的服务;每一层都使用其下各层的功能。
从下往上依次是
-
硬件
-
内核
-
系统服务
-
安卓运行环境
-
应用
图 3-1. 安卓堆栈
硬件
当然,安卓堆栈下面是硬件:一块热硅片。虽然硬件不是安卓堆栈的一部分,但我们必须认识到,安卓系统所设计的硬件对系统造成了一些相当苛刻的限制。到目前为止,这些限制中最重要的就是功耗。大多数普通操作系统都假定电源是无限的。而安卓系统却不能。
内核
安卓操作系统依赖于 Linux 内核。内核负责提供开发人员所期望的基本服务:文件系统、线程和进程、网络访问、硬件设备接口等。 Linux 是免费开源的,因此深受硬件和设备制造商的青睐。
由于基于 Linux,Android 与常见的 Linux 发行版有一些相似之处:Debian、Centos 等。不过,在内核以上的层级,相似性就降低了。大多数常见的 Linux 发行版在很大程度上都是基于 GNU 系列系统软件(正确地说,应该被称为 GNU/Linux),而 Android 的系统软件则有很大不同。一般来说,普通 Linux 应用程序无法直接在 Android 系统上运行。
系统服务
系统服务层庞大而复杂。它包括各种各样的实用程序,从作为内核一部分运行的代码(驱动程序或内核模块)、管理各种内务任务的长期运行应用程序(守护进程),到实现加密和媒体展示等标准功能的库。
该层包括几个 Android 独有的系统服务。其中包括Binder,这是 Android 必不可少的进程间通信系统; ART,它已取代 Dalvik 成为 Android 的 Java VM;以及 Zygote,这是 Android 的应用程序容器。
安卓运行环境
系统服务之上的一层是Android 运行时环境的实现。Android 运行时环境是一系列库的集合,您可以通过import 语句在应用程序中使用这些库:android.view、android.os 等。它们是由下面各层提供的服务,可供您的应用程序使用。它们之所以有趣,是因为它们是用两种语言实现的:通常是 Java 和 C 或 C++。
您的应用程序导入的那部分实现很可能是用 Java 编写的。而 Java 代码则使用 Java 本地接口(JNI) 来调用本地代码,本地代码通常是用 ...