Android 入门






4.90/5 (57投票s)
通过对 Android 的介绍、与其他移动平台的比较,以及对 Android 架构和应用程序组件进行高层次的概述,开启 Android 开发的学习之旅。
移动热潮
我找不到比“M4W - Mobility Whoever Whenever Wherever Whatever (M4W)”更贴切的词来形容我们今天经历的极端移动热潮了。我认为这很好地概括了地球上许多地方发生的现象——从穷人到富人,从农村到城市;每个人都在关注着什么?手机。我没开玩笑!看看 这里。
如今,绝大多数(如果不是全部)手机早已不再仅仅是“电话”,它们是能够瞬间变成网页浏览器、相机、摄像机、GPS 导航仪、音乐播放器、平板电脑、电视的“变形金刚”,只需指尖轻触即可实现。这些变形金刚有一个更贴切的名字——智能手机。事实上,人们手中拿着的都是微型计算机——体积虽小,但功能却不亚于传统的台式机或笔记本电脑。每部智能手机的核心是一套名为移动操作系统(mobile operating system)的软件,它负责管理手机硬件资源并为其他程序(恰当地称为应用程序)提供服务。它们类似于传统计算机的操作系统——IBM 兼容 PC 的 Microsoft Windows 和 Apple 电脑的 OS X。从 1993 年的智能手机鼻祖 IBM Simon,到 1996 年的 Palm Pilot,1998 年的 Nokia Communicator,2000 年的 Windows Pocket PC,2002 年的 BlackBerry,2007 年的 Apple iPhone,再到 2008 年的 Android,在过去的 20 年里,移动操作系统发生了巨大的演变。以至于人们选择移动平台来执行各种任务的频率比以往任何时候都要高——例如网上银行、社交网络、游戏等等。欢迎来到后 PC 时代!
根据 国际数据公司 (IDC) 全球季度手机追踪报告 最近发布的手机预测,Android 在移动操作系统中仍然是明显的市场领导者,预计 2014 年的市场份额将达到 80.2%(表 1)。
操作系统 | 2014 年出货量* | 2014 年市场份额 | 2018 年出货量* | 2018 年市场份额 | 2013-2018 年复合年增长率 |
---|---|---|---|---|---|
Android | 997.7 | 80.2% | 1,401.3 | 77.6% | 12.0% |
iOS | 184.1 | 14.8% | 247.4 | 13.7% | 10.0% |
Windows Phone | 43.3 | 3.5% | 115.3 | 6.4% | 28.1% |
BlackBerry | 9.7 | 0.8% | 4.6 | 0.3% | -25.0% |
其他 | 9.3 | 0.7% | 37.7 | 2.1% | 31.5% |
总计 | 1,244.1 | 100% | 1,806.3 | 100% | 12.3% |
来源:IDC 全球手机追踪报告,2014 年 5 月 28 日
* 复合年增长率 (CAGR) 指复合年均增长率
* 预测数据
Android 自问世不到 6 年就超越并一直领先于所有竞争对手,您难道不对此感到惊叹吗?继续阅读,自行寻找答案……
Android 的故事
Android,以本文开头的绿色机器人为象征,是由开放手机联盟 (OHA) 设计、工程和维护的开源移动操作系统。OHA 是一个由 84 家技术和移动公司组成的庞大联盟,包括 Google、HTC、Sony、Dell、Intel、Motorola、Qualcomm、Texas Instruments、Samsung Electronics、LG Electronics、T-Mobile 等等。Android 的问世开始颠覆市场格局,并削弱了此前一直主导市场的 iOS 的受欢迎程度。
与 iOS 或 Windows 不同,Android 是一个完全开源的移动操作系统,基于 Linux 内核,并根据 Apache v2 许可协议发布,该协议允许制造商和移动运营商利用该平台进行创新,而无需将其贡献回开源社区。代码是免费提供的,无线终端制造商可以根据需要进行修改,以创建定制的移动解决方案。这使得 Android 能够迅速崛起并占据市场主导地位。
自 2008 年秋季首次亮相以来,Android 取得了突飞猛进的发展。在此期间,它经历了前所未有的、令人惊叹的更新速度,这与任何其他开发周期都不同。在 Android 商业化存在的头一年,OHA 每两个半月就发布一个新版本的移动操作系统。然而,行业的其他部分则进展缓慢。苹果 每年更新一次 iOS,而微软则用了 2 年时间才将 Windows Phone 从 7 更新到 8,而且它们看起来变化不大。对于 Android 用户来说,如果今年看到的东西与去年看起来有所不同,那他们就该庆幸了。例如,Google Play 在五年内经历了五次重大改版。对于 Android 来说,这是常态。
自 2009 年 4 月以来,Android 版本一直采用甜点主题的代号,并按字母顺序发布:Cupcake、Donut、Eclair、Froyo、Gingerbread、Honeycomb、Ice Cream Sandwich 和 Jelly Bean。当 2013 年 10 月 31 日发布最新的甜点(哦!我的意思是版本)时,OHA 通过命名为Kit Kat 来取悦所有巧克力爱好者!2014 年 11 月,Android Lollipop——Android 的最新版本发布了。
Android 的故事最好通过图 1 中的信息图来体现,由socialcubix.com 提供。
信息图由socialcubix.com 制作。 |
图 1:Android 的故事 |
Android 无处不在
这种不懈的持续改进努力促使 Android 取得了今天的巨大成功。截至 2010 年第四季度,Android 已正式超越竞争对手,成为全球最受欢迎的智能手机操作系统(表 2)。
![]() |
自那时以来,Android 就像一匹脱缰的野马,在激烈的全球市场中每季度都在不断扩大领先优势。此外,每月激活的新 Android 设备数量持续以惊人的速度激增。截至 2013 年 4 月,平均每天约有 150 万台 Android 设备被激活。从表 3 中可以看到,Android 只能更上一层楼!
Android 智能手机 |
---|
![]() |
![]() |
Android 平板电脑 |
![]() |
Android 应用 |
![]() |
Android 万物
虽然 Android 最初主要是一个面向智能手机市场的移动操作系统,但它已经扩展到包括全系列的 平板电脑 和 笔记本电脑。Android 还用于驱动 Google Glass 和 Google TV。未来,Google 计划通过 Android Wear 将 Android 引入智能手表和可穿戴设备,甚至通过 Android TV 进入我们的客厅。另一方面,开放汽车联盟 (Open Automotive Alliance) 计划将 Android 带入汽车。随着时间的推移,Android 将成为一个全功能的消费类操作系统,几乎存在于我们日常使用的万物之中。
Android 统一
自问世以来,Android 与最激烈的竞争对手相比,其一项始终脱颖而出的功能是允许用户在其主屏幕上添加和使用交互式小部件(widget)。Android 应用可以包含小部件作为安装包的一部分。用户只需将他们喜欢应用的小部件拖放到主屏幕上的任何位置,即可直接从设备主屏幕进行交互。这项功能即使在最新的 iOS 版本中也尚未提供。在更新的 Android 版本中,小部件甚至可以在设备锁屏上使用——这项功能是任何其他移动平台(包括 Windows Phone 和 iOS)都未能媲美的。
在其最新版本4.4 Kit Kat 中,Android 提供了许多 新功能,旨在提升用户体验。它为跨硬件平台提供了更统一的体验,可以轻松地在各种屏幕尺寸和硬件配置之间切换。电子邮件应用程序通过借鉴流行 Gmail 客户端的许多优秀功能而得到了改进。锁屏已得到改进,以支持更多自定义。状态栏、Google 搜索集成和Google Now 在Kit Kat 中都得到了改进。
Android 曾被誉为移动行业的“丑小鸭”,如今已蜕变成一只“美丽而沉浸的天鹅”,拥有更精致的设计、更强的性能和新功能,以至于它现在 赢得了一系列用户界面的设计奖项。
面向开发者的 Android
Android 始终致力于为其开发者营造一个有利的开发环境。毕竟,优秀的开发者是创新发展的关键。他们更有可能创建更好、更受欢迎的应用程序,从而吸引消费者转向该平台。
要在 Google Play 上发布应用,新 Android 开发者只需支付一次性 25 美元(美元)的注册费,即可 设置一个发布账户,该账户允许无限数量的应用提交。通常,应用提交后几小时内即可购买和下载。这既快速又高效!
相比之下,要在 Apple App Store 上分发应用,新 iOS 开发者必须先 注册一个 Apple 开发者账户,然后加入 Apple 的 iOS 开发者计划,该计划每年费用为 99 美元(美元)。通常,提交到 Apple App Store 需要 4 到 6 周的审批时间才能向消费者提供。在当今竞争激烈的应用市场中,这种上市时间差异非常显著。
Android 应用程序可以在任何现代计算机上创建,包括 Windows、Mac 和 Linux。设置、开发、调试、测试到发布 Android 应用程序所需的所有 工具 都可以免费下载,并在不到一小时内完成安装和设置。
为了向 Android 开发者提供大力支持,Google 托管了一个 官方网站,提供开发 Android 应用所需的所有信息——软件工具、设计指南、开发指南、分发指南、API 指南、参考和项目示例。
为了促进和支持开发者开发能够让移动用户惊叹不已的优质 Android 应用,Google 发起了两次Android 开发者挑战赛 (ADC) 竞赛 ADC1 和 ADC2,旨在评选最具创新的 Android 应用。Google 提供了 1000 万美元的奖金,在 ADC1 和 ADC2 之间分配。ADC1 于 2008 年 1 月启动,ADC 2 于 2009 年 5 月启动。这些竞赛获得了巨大成功,并在开发者、科技爱好者和普通消费者中引起了极大的兴奋和宣传,他们对使用 Android 手机可以实现的“不可思议”的任务数量感到惊叹。
您已经看到了 Android 的巨大成功和巨大的潜力,再加上低成本的启动、免费的开发工具、快速的市场响应以及 Google 的强大支持,您难道不想加入 Android 开发的行列吗?不要犹豫太久,以免错过机会。
对于那些继续前进的人来说,旅程即将开始。我们的第一站是 Android 架构,在那里我们将一窥 Android 操作系统的内部结构。
Android 架构
Android 操作系统由堆叠的软件组件组成,分为五个部分和四层,如图 2 所示,从最底层开始,即 Linux 内核、库和 Android Runtime、应用程序框架和应用程序。每一层都使用其下方各层提供的服务。
![]() |
图 2:Android 架构 |
让我们逐一进行介绍。
Linux 内核
Android 堆栈的底部是 Linux 内核。它是整个 Android 系统的核心。它提供服务,代表应用程序处理与硬件组件交互的所有低级细节。这些服务包括:
-
安全
-
网络
-
设备驱动程序
-
电源管理
-
进程管理
-
内存管理
-
共享库支持
库
在 Linux 内核层之上是 Android 的原生库层。这些库是用 C 或 C++ 编写的程序。它们提供指令来指导设备处理不同类型的数据。
-
libc 是一组 C/C++ 库。
-
SGL 用于渲染 2D 图形。
-
SSL 负责互联网安全。
-
FreeType 用于渲染位图和矢量字体。
-
Open GL|ES 用于渲染 2D 或 3D 图形和视频。
-
WebKit 是用于渲染 HTML 内容的浏览器引擎。
-
Surface Manager 用于在屏幕上合成窗口。
-
SQLite 是用于存储和共享应用程序数据的数据库引擎。
-
Media Framework 提供各种媒体编解码器,以处理各种音频、视频和图像格式的录制和播放。
Android运行时
位于与 Android 原生库相同的层中,Android Runtime 包含两个非常重要的组件,即 Dalvik 虚拟机 (VM) 和核心库。
-
Dalvik VM 是一种 Java 虚拟机,但它用于 Android 设备运行应用程序,并且是专门为低处理能力和低内存环境设计的并进行了优化。Dalvik VM 通过提供安全性、隔离性、内存管理和线程支持,允许多个 VM 实例同时创建和运行。它由 Google 的 Dan Bornstein 开发。
-
核心库 提供核心 Java API 中可用的大部分功能,使 Android 开发者能够使用标准的 Java 编程语言编写 Android 应用程序。
应用程序框架
Android 是一个开放的开发平台。 应用程序框架层提供了许多更高级别的可重用工具和服务,Android 应用开发者可以利用这些工具和服务来构建极其丰富和创新的应用程序,而无需重复造轮子。应用程序框架的一些更重要的组件包括:
-
Telephony Manager 管理所有语音通话。
-
Location Manager 提供location 感知服务。
-
Activity Manager 管理应用程序中活动的生命周期。
-
Content Providers 管理应用程序之间的数据共享。它将内容集中在一个地方,许多不同的应用程序可以根据需要进行访问。
-
Resource Manager 管理应用程序使用的各种资源类型。它们是应用程序代码使用的静态内容,例如位图、颜色、布局、字符串、动画指令等。
Application
最后,我们到达了顶层——应用程序。所有 Android 应用程序都驻留在此。这是 Android 设备用户将与之交互以执行基本功能(如拨打电话、发送消息、浏览互联网)的层。每台 Android 设备都预装了此层中的几个标准应用程序,例如:
-
拨号器
-
SMS
-
拨号器
-
联系方式
-
网页浏览器
在浏览完 Android 操作系统的内部结构后,我们将继续下一站——构成每个 Android 应用程序的应用程序组件。
应用程序组件
尽管 Android 是基于 Java 的,但它在根本上与 Java 编程不同。Android 编程组织成应用程序组件,它们协同工作以创建每个功能性应用程序。它们是 Activity、Service、Broadcast Receiver 和 Content Provider。这四个组件是 Android 应用程序的基本构建块。它们松散耦合,并在名为AndroidManifest.xml 的应用程序清单文件中声明,该文件描述了应用程序的每个组件以及它们如何交互。让我们了解它们在任何 Android 应用程序中扮演的角色和职责。
-
Activity – Activity 代表 Android 设备上的一个带有用户界面的屏幕。例如,一个拨号应用程序通常会在设备上有一个 Activity(屏幕),该屏幕包含一个拨号盘(10 个数字键用于拨号)和一个位于其上方的文本框,用于显示正在拨打的号码。而一个电子邮件应用程序则有一个 Activity 用于显示传入电子邮件列表,另一个 Activity 用于阅读特定电子邮件,还有一个 Activity 用于撰写电子邮件。如果一个应用程序有多个 Activity,那么其中一个将在应用程序清单文件中标记为主(初始)Activity,以便在应用程序启动时运行。需要注意的一个重要点是,Activity 在不同的进程中运行,并且它们可以被其他应用程序调用来执行工作(需获得权限)。例如,相机应用可以启动电子邮件应用的撰写新邮件 Activity,以将照片附加到新电子邮件中。
-
Service – Service 没有用户界面,专门设计用于在后台运行以执行长时间运行的操作。应用程序可以启动一个 Service,即使用户切换到另一个应用程序,它也会在后台继续运行。例如,一个 Service 可能会处理网络事务、播放音乐或执行数据同步,所有这些都可以在后台进行,而不会干扰或阻止用户与前景 Activity 的交互。
-
Broadcast Receiver – Broadcast Receiver 允许您的应用程序注册系统或应用程序生成的通知。所有为某个通知注册的接收者将在该通知广播时被 Android 运行时通知。您可以将通知比作事件,将广播接收器比作事件驱动编程中的事件监听器。其中一些通知由系统生成,例如电池电量低或屏幕锁定,而另一些则由用户应用程序生成。例如,一个应用程序可以广播一个通知,告知其他应用程序某个数据的到来(例如新邮件到达)。注册此通知的广播接收者将收到通知,并由它们决定采取适当的操作,例如启动新的 Activity 或 Service。
- Content Provider – Android 应用程序默认无法访问属于另一个应用程序的数据。但是,有些情况需要应用程序与其他应用程序共享一些数据。Content Provider 提供数据接口,以便数据可以在应用程序之间共享。 Content Provider 管理一个跨应用程序共享数据的中心存储库。物理上,数据可以存储在文件系统、SQLite 数据库或任何其他持久数据存储位置。Android 中一些内置的 Content Provider 示例是联系人、MediaStore、书签和设置。Android 中的默认联系人应用程序有一个 Content Provider,可以与其他应用程序共享联系人信息。难怪 Facebook 和 Google 等社交媒体应用程序可以与您 Android 设备上现有的联系人信息同步。
附加组件
在构建上述四个应用程序组件时,还会使用其他组件,它们是 View、ViewGroup、Layout、Fragment、Intent、Resources 和 Manifest。
-
View – 您在 Android 设备屏幕上看到的每一项都是一个 View 对象。View 是 Android 应用中用户界面组件的基本构建块。View 对象在屏幕上占据一个矩形区域,并负责绘制和事件处理。View 对象是交互式 UI 小部件,例如按钮、文本字段、复选框、选择器等等。它们可以比作 Windows Forms 中的控件或 Web Forms 中的输入类型。它们通常分组到称为 ViewGroups 的不同容器中。
-
ViewGroup – ViewGroup 是一个特殊的 View,它可以包含其他 Views 或 ViewGroups。用面向对象(OO)的术语来说,它是 View 的一个子类。ViewGroup 对象是不可见的视图容器,它们定义了容器内的子视图如何相关或如何布局。RadioGroup 对象就是一个 ViewGroup 对象的例子,它包含多个单选按钮,一次只能选择一个。您也可以将 ViewGroup 比作 Windows Forms 中的Panel 控件或 HTML 中的div 标签。
-
Layout – Layout 是一种 ViewGroup,它定义了内部子视图如何在屏幕上进行视觉定位。用面向对象(OO)的术语来说,它是 ViewGroup 的一个子类。一些更常见的布局是:
-
LinearLayout 是一个 ViewGroup,它将子视图垂直或水平地排列在单个方向上。
-
RelativeLayout 是一个 ViewGroup,它以相对位置显示子视图。
-
ListView 是一个 ViewGroup,它以单列表格的形式显示可滚动项目列表。
- GridView 是一个 ViewGroup,它以二维、可滚动网格的形式显示项目,类似于表格。
-
-
Fragment – Fragment 代表一个行为或用户界面,它必须始终嵌入在 Activity 中。Fragment 的主要优点是模块化设计和可重用性。您可以在一个 Activity 中组合多个 Fragment,或在多个 Activity 中重用 Fragment。
-
Intent – Intent 是由某些应用程序组件发起的异步消息,用于请求其他 Android 组件(如 Activity、Broadcast Receiver 或 Service)的功能,这些组件可以位于同一应用程序内或位于其他应用程序中。例如,一个 Activity 可以发送一个 Intent 消息来启动相机应用程序中的一个 Activity,用于拍照。
-
Resources - Resources 是应用程序使用的非代码资产,例如文件、位图、布局定义、用户界面字符串、动画指令等。Android 资源系统会跟踪所有这些资产,并将它们与代码分开。Android SDK 工具会在构建时将您应用程序的资源编译到应用程序二进制文件中。使用资源可以轻松地在不修改代码的情况下更新应用程序的特性,并且通过为不同的语言和屏幕尺寸提供替代资源,您可以优化您的应用程序以适应各种设备配置。这是开发兼容各种设备上的 Android 应用程序的一个重要方面。
-
Manifest – 在每个 Android 应用程序中,您都会在其根目录中找到一个名为AndroidManifest.xml 的文件。 如果您的应用没有这个文件,Android 系统将不允许运行。Manifest 文件是一个 XML 文件,其中包含 Android 系统在允许运行任何应用程序代码之前必须知道的应用程序的所有配置信息——从应用程序的名称、图标、版本,到硬件和软件要求,甚至还可以过滤进入应用程序的Intents。真是一个忙碌的家伙,对吧? 您可以将其比作 ASP.NET 应用程序的Web.config 文件。我认为它是应用程序的命令与控制中心。您想了解或操作应用程序的一切,都可以询问AndroidManifest.xml。Android Developers 有一个关于Android Manifest 功能的全面列表,请自行查阅。
总结...
我们已经到达了第一个休息站。这次旅程从对 Android 的认识开始,它与其他移动平台相比如何,以及希望能激发您开始为 Android 进行开发。旅程的第二部分涵盖了 Android 架构的高层次概述以及构成每个 Android 应用程序的各种应用程序组件。这次旅程是学习 Android 开发的必要前奏。在期待下一次旅程的同时,我们现在就放松一下。稍后见。 :java