65.9K
CodeProject 正在变化。 阅读更多。
Home

文章 1 - Android OS 简介

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.33/5 (16投票s)

2014年8月3日

CPOL

14分钟阅读

viewsIcon

33543

本文将介绍 Android 操作系统的历史和架构设计。它还将涵盖与其他各种移动操作系统的比较。

引言

本文将帮助您理解 Android 操作系统的基础知识及其背后的架构。本文将涵盖以下主题:-

·         Android 是什么、它如何与其他移动平台比较以及为什么开发者应该关注 Android 开发的简要概述。

·         Android 架构堆栈(即 Linux 内核、库、Android 运行时、应用程序框架、应用程序)不同层级的高级概述,以及构成 Android 应用基本构建块(即 Activity、Service、Broadcast Receiver、Content Provider)的组件。

目标读者

本文适用于希望了解 Android 移动操作系统基础知识的新开发者或初学者。受众可以是想要制作学校项目的高中生,或者希望学习新技术以在 Android 应用业务中寻找机会的未来开发者。

先决条件

无需任何先决条件。本文本身包含足够的信息来理解这些材料。

特别信息

供将来参考的重要内容已用斜体标注,应将其收藏以供后续文章参考。

背景

Android 操作系统简介

在技术早期,手机很笨重,其操作系统在可用性和功能方面非常有限。然而,随着新的、更好的移动处理器的出现,移动操作系统也得到了发展和成熟。

苹果于 2007 年 6 月推出了第一款搭载 iOS 操作系统的 iPhone。它是一款成功的产品,用户体验让消费者惊叹不已。但它是闭源的,因此其他公司无法将其用作其设备中的操作系统。这些公司也希望销售他们的移动硬件设备,这促使了新移动操作系统的兴起。

84 家公司组成的开放手机联盟是 Android 普及的重要因素。与此同时,谷歌将 Android 开源的举动使其成为一个流行的开发平台。Android 为每个手机制造商提供了为其自己的移动硬件设备定制 UI 并销售其自己的 Android 版本的能力。Android 很快就被开发者和用户广泛采用并接受为移动操作系统,因为它具有高度可定制性并支持几乎所有种类的硬件。

  • 历史

Android Inc. 是一家初创公司,于 2005 年被谷歌收购。从 2005 年到 2008 年,Android 经历了一系列发展。主要参与者 Andy Rubin、Rich Miner、Nick Sears 和 Chris White 的目标是允许应用程序(app)相互交互并重用组件。这一理念也应用于服务、数据和用户界面。

注意:App 在移动领域指应用程序。

谷歌发布的 Android 操作系统不同版本的时间线。

注意:最新版本的 Android 是 4.4 Kit Kat。最新的预览版本是面向开发者的 Android L。

history

  • 什么是 Android?

Android 是 Linux 操作系统的精简版,即它被编译为在智能手机和平板电脑上运行,这些设备在处理能力和内存方面比个人电脑资源更少。然而,它仍然能够完成日常生产性工作,如文字处理、发送电子邮件、同步、共享、通话以及其他通信需求。它也已成为主要的娱乐设备。您可以从 Google Play 商店下载应用程序,播放视频、听音乐和玩许多游戏。其中许多是免费的。该操作系统是开源的,许多手机制造商,如三星、HTC、LG,都推出了基于 Android 的新 Android 设备,包括手机和平板电脑。

Android OS Basic
图 1.2

Android UI 基础知识(图 1.2)

主屏幕 - 主屏幕是您可以轻松自定义的主界面。您可以添加任意数量的主屏幕(取决于供应商)。

应用抽屉 - 应用抽屉是您可以安装所有应用程序的区域,包含可以通过按住并拖动到主屏幕上随时放置到主屏幕上的图标。

Google Play 商店 - 这是一个您可以购买和下载免费应用程序的市场。

搜索栏 - 这是一个与操作系统集成的搜索栏,您可以通过在其中输入任何内容来搜索应用程序或搜索 Google。

导航栏 - 它包含返回按钮、主页按钮和最近使用的应用程序按钮。

状态栏 - 状态栏实际上是一个通知栏,它为您提供有关待处理信息以及电池、无线电信号、Wifi 信号和时间等重要信息。

通知抽屉 - 通知是用户可以随时从状态栏访问的简短消息。它提供更新;重要但并非关键的提醒或信息。它可以通过向下滑动状态栏(通知栏)打开,如图 1.3 所示。

Notification Drawer
图 1.3

 

与其他移动操作系统的比较

comparison with other mobile OSs

为什么选择 Android?

·         它是开源的。

·         为您提供免费应用程序。

·         庞大的应用基础。

·         灵活易用的界面。

·         来自不同制造商的不同硬件选项。

·         小部件。

·         更便宜的设备。

·         使用各种 ROM(如 Cyanogenmod)可自定义 UI。

·         动态壁纸。

·         选择不同键盘(如 Swift Key)的选项。

为什么需要学习 Android?

·         更多就业机会。

·         所有用于开发 Android App 的工具都来自 Google,且是免费的。

·         开发者费用较低,一次性 25 美元。

·         大量受众使用 Android 手机,因此应用程序拥有更广阔的消费者,从而带来更多收入。

·         互联网上提供了大量免费教程和文本信息来学习 Android。

·         需要基本的 Java 编程技能。

·         像 Nexus 4 这样的廉价硬件设备可以用于测试需要真实硬件的应用程序。

·         更多设备,如智能手表和 Android Wear 使用相同的生态系统,因此可以实施和发布应用程序的微小或更多更改。

·         在应用市场中发布应用程序轻松无忧。

Android 操作系统架构

Android 移动操作系统在开发方面布局良好。一旦我们理解了这种架构背后的理念,我们就能简单地理解整个架构,这个理念是:

移动操作系统的限制

1.       内存和处理能力方面资源有限。当你看到一款四核或八核处理器的手机时,不要与你的 PC 四核处理器混淆。PC 处理器比移动处理器更强大,而且系统中也没有内存限制。手机硬件,尤其是处理器,其设计方式是功耗更低,这引出了下一个问题。

2.       更高的处理能力意味着更多的电池使用。移动操作系统应与处理器互补,以消耗更少的电池并提供最佳性能。这解释了为什么 PC 处理器与移动处理器不同。

3.       电话是主要优先级;智能手机应该能够做其他事情,但在通话和其他方面不能妥协。

现在为了解决这些问题,开发者提出了真正帮助 Android 成为最成功的操作系统的解决方案。

解决方案是 Dalvik,这是 Google 的创意。Dalvik VM 获取生成的 Java 类文件,并将它们组合成一个或多个 Dalvik 可执行文件(.dex)。因此,代码更优化,可以在更小的设备上运行。此外,通过使用 ANR,应用程序资源得以释放。

注意:ANR 意为“应用程序无响应”。VM 意为虚拟机。

在 Android 中,应用程序响应能力由 Activity Manager 和 Window Manager 系统服务监控。当 Android 检测到以下任一情况时,将为特定应用程序显示 ANR 对话框:

·         在 5 秒内没有响应输入事件(如按键或屏幕触摸事件)。

·         广播接收器在 10 秒内未完成执行。

  • Android L 中的新运行时

2014 年,Google 用新的运行时 ART 取代了 Dalvik。它更加优化,为 UI 改进提供了更多空间。在 Android L 版本中,使用 Polymer 设计来创建动画 UI,这似乎更依赖于 ART。但 Google 如今能够实现 ART,因为我们现在拥有八核处理器和 2 到 3 GB 内存的设备。对于内存和处理能力较小的设备,Dalvik 仍然更好。

  • 架构堆栈

Architecture of Android
图 1.4

在图 1.4 的底部,您可以看到 Linux 内核负责电源管理、资源访问和其他操作系统职责。它还包括设备驱动程序和针对摄像头、键盘等的供应商特定驱动程序。

然后,在下一层,您可以看到本地库,它们是 C/C++ 库,支持图形、音频、浏览器支持和其他进程间通信。SQLite 为数据库和内容提供程序提供支持。

注意:核心库可能会更改,因为它们都是 Android 的内部实现
细节,不直接暴露给已发布的 Android API。 

在下一层是 JAVA SDK,它对开发者非常有用,因为它是一个高级 API,开发者使用它来开发最终用户应用程序。

注意:API 指的是应用程序编程接口。

在最后一层,有用于联系人管理、通话、浏览、消息传递和主屏幕的默认应用程序,它们与操作系统深度集成。

Android 用户界面

Android Ui

Android 使用的 UI 框架类似于其他基于桌面的框架。它是第四代 UI 框架。例如,基于 Java 的 Swing UI 是第三代。它使用 XML 声明界面(视图)。您将这些 XML 视图定义作为窗口加载到您的 UI 应用程序中。它与基于 HTML 的应用程序非常相似。要获取每个元素,您使用 ID,并在 Java 类中使用这些 ID 获取这些元素,然后您可以根据需要操作它们。

事件文本也可以与静态屏幕分离,并保存在名为 res(即 resources)的不同文件夹下的 Strings.xml 文件中。这样做是为了方便在需要更改应用程序语言时轻松添加不同的字符串资源。

Android UI 中的屏幕称为 Activities,它包含多个视图。Android 3 版本引入了 fragment,这为 UI 开发者提供了更大的自由度和灵活性。

Android 应用程序生命周期 

Android Application Life Cycle

图片参考 -  https://developer.android.com.cn/training/basics/activity-lifecycle/starting.html

当一个应用程序启动时,会发生某些事件,这些事件由系统触发,开发者有机会做一些事情。例如,当你在笔记应用中记笔记时,来了一个电话,你的笔记应用会进入后台,但在它停止之前,应用的状态和数据应该被保存。这些事件可以通过应用程序生命周期轻松处理。因此,所有这些方法都定义在 Activity 类中,你可以通过在你的 Activity 中实现它们,轻松地在这些方法中编写代码。

OnCreate - 当 Activity 被创建时。

OnStart - OnStart 在 OnCreate 之后立即调用。OnStart 也可以从 OnRestart 调用。当 OnStart 被调用时,你的 Activity 对用户不可见,但即将可见。

OnResume - OnResume 将在 OnStart 之后调用,此时 Activity 处于前台并可供用户访问。

OnPause - 当用户决定切换到另一个 Activity 时,系统会调用您的 Activity 的 OnPause。

OnStop - 当您的 Activity 对用户不可见时调用。

OnRestart - 当您的 Activity 在调用 OnStop 后从后台回到前台时,调用 onRestart。

OnDestroy - 如果您的 Activity 位于活动堆栈中但对用户不可见,并且系统决定杀死您的 Activity 以节省一些资源,则会调用 OnDestroy。

Android 应用程序的构建块

  • 活动
  • 服务
  • 广播接收器
  • 内容提供者
  • 意图(Intents)

活动(Activities) - 一个 Activity 代表一个具有用户界面的单一屏幕。例如,一个联系人屏幕是一个独立的 Activity,它与使用短信屏幕向某人发送消息的 Activity 不同。

服务(Services) - 服务与在后台运行且没有界面的 Windows 服务没有区别。它们只是在后台完成工作,除非用户希望它们停止,否则不会停止。有些服务(如系统服务)应该始终运行,否则可能导致操作系统出现不可预测的行为。服务可以绑定和解绑。

内容提供者(Content Provider)- 它们充当您的应用程序与数据存储之间的中介,数据可能存储在您的设备上或云端。例如,您的联系人应用程序显示联系人列表是一个 Activity,它请求内容提供者“我需要联系人来显示”,然后内容提供者监听该请求并查询数据存储,并将结果返回给 Activity。实际过程略有不同,但这个例子是为了理解的更大图景。

广播接收器(Broadcast Receiver) - 它是一个响应系统范围广播通知的组件。例如,电池电量低或无网络等。应用程序也可以广播消息并显示在通知抽屉中。

意图(Intents)是异步消息,它们在运行时将各个组件相互绑定。简单来说,意图可以用来从一个应用程序调用不同的应用程序。意图是您可以告诉 Android 执行的动作。例如,一个应用程序可以调用电话。

在深入 Android 应用开发之前要记住的事项和术语(陷阱)

ADB - Android 调试桥 - 非常有用的 CMD 工具,随 ADT 提供,可在 Mac 或 Windows 上使用,用于在调试模式下使用硬件设备或使用模拟器。

模拟器 - 这是一个在计算机上运行的虚拟设备,因此您无需使用物理设备即可测试您的应用程序。但是,如果您的应用程序使用加速计功能或前后摄像头,您仍然需要硬件设备并在真实设备上运行应用程序,以查看应用程序是否运行流畅或获取应用程序的真实性能。

Logcat - 它是 Eclipse 中非常有用的工具,用于调试代码和应用程序。当您在设备上运行应用程序时,它会记录每一个微小的详细信息。您可以使用此工具捕获所有事件。

UI 最佳实践 - 您应该遵循 Google 在 UI 设计方面的建议。在 https://developer.android.com.cn/index.html 的设计部分有非常好的解释。

仪表板 - 用于在应用市场中发布您的应用程序。您需要支付 25 美元才能获得开发者账号,以便在应用市场中发布您的应用程序。

Google API - 您必须在应用程序中使用 Google API 来获取各种服务,如地图或云,因为它们易于集成和使用。

Eclipse 调试 - 在运行应用程序之前,请务必保存文件并构建您的项目。大多数情况下,如果您的 xml 文件或字符串文件中有任何错误,它们很难追溯,因此请确保您的 xml 标记正确。正确意味着每个标签都由开始标签关闭,并且没有拼写错误。否则,有时新开发者无法找到项目中的问题,并且他们会遇到构建错误,这是一个常见的情况。

彻底阅读文档,一旦您确信自己理解了 Android 的概念, then dive in the app development。这在长期内帮助很大。您可以在 https://developer.android.com.cn/index.html 上阅读所有文档。

更多地学习设计模式 和不同的架构设计,这将帮助您编写更易于管理的应用。例如,控制反转、依赖注入、面向服务架构等。

您可以从 https://developer.android.com.cn/index.html 下载包含 ADT 的完整开发者工具,它是开源且免费的。

参考文献

图片参考 -

https://developer.android.com.cn/training/basics/activity-lifecycle/starting.html

文本参考 -

  • Pro Android 4, Apress
  • https://developer.android.com.cn/index.html
  • http://visual.ly/comparison-mobile-os-android-ios-windows-and-blackberry
  • http://www.phonearena.com/news/Mobile-OS-comparison-Windows-Phone-8-vs-iOS-6.0-vs-Android-4.1_id31473

关注点

在撰写本文的过程中,我发现许多我自己以前忽略的事实。Android 是一个出色的框架,现在为我们所有人带来了新的机会。我认为没有任何其他平台或移动操作系统能够主宰 Android。

历史

  • 版本 1.0 - 发布了文章的初始版本,涵盖了所需主题 - 2014 年 3 月 8 日。
  • 版本 1.1 - 修复了图片网址 - 2014 年 3 月 8 日。
  • 版本 1.2 - 修复了图片大小并添加了 ART 部分 - 2014 年 3 月 8 日。
  • 版本 1.3 - 添加了图片参考并将所有注释加粗 - 2014 年 8 月 22 日。
© . All rights reserved.