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

Android 101

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2014年7月26日

CPOL

10分钟阅读

viewsIcon

14318

本文将解释Android架构的基础知识,以及为什么开发者应该关注Android。

引言

这是我在Code Project上的第一篇文章。我决定参加Android教程竞赛(文章 #1),因为我认为这是个不错的起点。我在Android开发方面经验不多,所以为了学到更多,我决定写一篇入门文章,因为学习任何东西最好的方法就是尝试向别人解释它。

什么是 Android?

Android是一款开源的移动操作系统,适用于各种设备和不同形态的产品。Android的目的是促进移动世界的开放性。自其诞生以来,许多公司都投资了Android。目前,Android开源项目由Google领导,大部分Android软件都获得了Apache 2.0许可。

Android的用户界面基于直接操纵。根据维基百科的定义:

直接操纵是一种人机交互风格,它涉及对感兴趣对象的连续表示,以及快速、可逆、增量式的操作和反馈。

更清晰地说,Android使用与现实世界操作相对应的触摸输入(例如滑动和点击)。输入响应是即时的,并提供触觉反馈,通常通过使用振动功能。

此外,大多数Android设备都内置了测量运动、方向和各种环境条件的传感器;设备配备了加速度计、陀螺仪和距离传感器。这些传感器用于响应额外的用户操作。例如,一个游戏可以让用户通过操纵摇杆来控制游戏角色在迷宫中移动。

Android版本

Android的最新主要版本是4.4(代号:Kitkat)。从1.5版本开始,Android版本都以一些甜点命名,并按字母顺序发布。

版本

代号

 

版本

代号

Android版本历史

1.5

Cupcake

 

2.3-2.3.7

Gingerbread

1.6

Doughnut

 

3.0-3.2.6

Honeycomb

2.0-2.1

Eclair

 

4.0-4.0.4

Ice Cream Sandwich

2.2-2.2.3

Froyo

 

4.1-4.3.1

Jelly Bean

Google每六到九个月发布一次Android的主要升级。然而,更新通常在官方发布后数月才会到来。这主要有两个原因。第一个原因是Android设备的硬件差异很大,因此每次升级都必须进行专门定制。第二个原因是制造商会定制Android,加入自己的界面和应用程序;这些定制需要在每次新版本发布时重新应用,从而导致额外的延迟。

这使得将Android移植到特定设备成为一个耗时耗力的过程。制造商会优先处理他们的设备,而将旧设备抛在后面。因此,无论手机是否有能力运行更新,旧设备都不会得到更新。

还有哪些其他选择?

有许多替代的移动操作系统。最常见的包括苹果的iOS、Blackberry的Blackberry OS和微软的Windows Phone。这三者都是闭源和专有的,这使得Android作为免费和开源的系统脱颖而出。

关于功能方面,我个人认为,所有移动操作系统都大同小异。你会发现关于哪个操作系统更优越的争论和比较,但最终还是个人的偏好问题。

最初,用户可能会发现一个操作系统在某些功能上比另一个更有吸引力,例如动态壁纸,但过了一段时间,用户就会停止注意到这些视觉上的细节。他们关心的是自己的应用程序。因此,在当今的移动世界中,应用程序比它们运行的操作系统更重要。

iOS和Android占据了最大的市场份额。然而,到目前为止,Apple仍然局限于销售高端设备,而Android则运行在各种形态和尺寸的设备上,从低端设备到高端设备。

这限制了Apple的市场份额,同时使得Android能够触及数亿用户市场,这些用户正从功能手机转向智能手机。目前,Android拥有最大的市场份额,其次是iOS,而Windows Phone则远远落后,市场份额仅为3%。

不是移动开发者?那就不是开发者……

这是Dino Esposito在2012年挪威开发者大会(NDC)上发表的一个精彩演讲的标题。它谈论了移动开发在短短几年内如何成为开发的主要焦点。如果你还没有看过,我建议你去看看。

如今,任何一个像样的开发者都不能忽视为移动设备开发。越来越多用户越来越依赖他们的智能手机。2014年,全球智能手机用户达到了17.5亿。这是一个巨大的用户群体,不能被忽视。人们希望随时随地都能获取信息。很明显,你需要将移动开发添加到你的技能组合中。问题是,为什么是Android呢?为什么不是iOS呢?

这可以归结为以下几点原因:

  1. Android在美国拥有61.9%的市场份额,在中国拥有82.7%的市场份额,在包括英国、法国、德国、西班牙和意大利在内的欧洲国家拥有73.3%的市场份额。这是一个你可以瞄准的巨大用户群体。
  2. 大量的社区成员已经对Android开发产生了兴趣;你作为开发者,将能够获得大量的资源(书籍、教程、视频等)。此外,你将面临的许多问题,你都会找到很多帮助,因为很可能已经有人遇到过类似的问题。
  3. Android市场稳定且已证明是成功的。目前Google Play商店上有超过一百万个应用程序,下载量超过250亿次。用户总是渴望更多的应用程序。
  4. 在你可以做什么方面没有限制。各种类型的应用程序都有需求,无论是社交媒体应用程序、游戏还是费用管理器。甚至SAP这样的公司现在也为移动设备提供仪表板解决方案,因为他们知道这是未来。这意味着你可以利用你在现有领域中已有的应用程序,并尝试为用户在智能手机上带来全新的体验。

Android架构栈

下图显示了Android架构。它由四个主要层组成,每一层都为其上一层提供不同的服务。

   

Linux 内核

第一层也是最基础的一层是内核,整个操作系统都构建在它之上。最新版本的Android(Kitkat 4.4)构建在Linux内核3.8之上。

内核有两个主要工作。第一个工作是与硬件交互,充当硬件和其他软件之间的抽象层。因此,内核的一部分是设备驱动程序(例如蓝牙、摄像头、Wifi等)。第二个工作是提供操作系统的核心功能,包括内存管理、进程管理、电源管理、网络和安全。

下一层是Android原生库,它们位于内核之上,并提供一套核心功能。其中一些著名的库包括用于在屏幕上渲染2D和3D内容的“OpenGL”,用于处理数据存储的数据库引擎“SQLite”,以及浏览器引擎“WebKit”。

Android运行时

Android运行时是一个Java虚拟机,它针对Android进行了优化,也被称为Dalvik虚拟机。出于安全考虑,所有Android应用程序都在此虚拟机中沙盒化运行。

但是,你不必担心性能缓慢,因为Android使用“即时(JIT)编译”。字节码的一部分会被即时编译成更快的机器码,以便在进程中执行。

你可能会问,为什么不一开始就把所有应用程序都编译成机器码。当你编译成机器码时,你是在为特定的CPU编译,不能在不同的架构上使用它,所以应用程序需要为所有可用的配置分别编译。Google选择了第二种选择,即在Play商店提供一个版本的应用程序,并使用JIT编译来提高性能。

目前,Google正在试验“预编译(AOT)编译器”,该编译器会在安装时将应用程序编译成本地代码。这将带来更好的性能和更长的电池寿命(运行时无需JIT编译器)。

应用程序框架

这一层提供了你的应用程序与之交互的构建块。它们还提供了一系列服务。这一层提供了开发者用于开发Android应用程序的工具。其中重要的构建块包括:

-Activity管理器:管理应用程序的生命周期。

-Content provider:管理应用程序之间的数据共享。

-Resource管理器:管理应用程序内的不同资源。

应用

这些是你编写的应用程序或预装的应用程序。值得一提的是,Android自带的应用程序(例如拨号器、联系人管理器)除了访问应用程序框架提供的相同构建块之外,没有其他访问权限。开发者可以替换这些应用程序为自定义的应用程序。这表明开发者在Android上可以取得的成就几乎是无限的。

应用程序组件

Android应用程序由一系列称为组件的构建块组成。四个构建块(组件)是Activity、Service、Content Provider和Broadcast Receiver。一些组件相互依赖,但每个组件都有其独特的目的并扮演特定的角色。

活动

Activity是一个带有用户界面的单个屏幕。例如,日历应用程序有一个Activity显示今天的条目列表,另一个Activity用于添加新条目,还有一个用于显示整个月份。一个应用程序 then 由一组Activity组成。

服务

另一方面,Service在后台运行。它可以用于执行长时间运行或远程操作,例如;网页浏览器可能有一个Service用于下载文件。与Activity不同,Service没有用户界面。Activity可以启动Service并让它们运行。

Broadcast receiver

Broadcast receiver用于响应系统范围的公告(例如,宣布低电量状态的广播)。Broadcast receiver不像Service那样没有用户界面,但它们可以创建一个通知栏来提醒用户。

Broadcast receiver允许你注册系统或应用程序事件,一旦事件发生,你就会收到通知。Broadcast receiver通常用于捕获某些事件,然后运行一个Service来根据该事件执行一些工作。

内容提供者

Content provider管理应用程序共享的数据,以便其他应用程序可以查询或修改你的应用程序共享的数据。Content provider允许你在一个地方集中内容,并让许多不同的应用程序根据需要访问它。它的行为非常像一个数据库,你可以在其中查询、编辑、添加或删除内容。

总而言之,用户可以执行的操作需要Activity,后台进程需要Service,接收消息需要Broadcast Receiver,而存储或检索数据则使用Content Provider。

Android的一个很棒的功能是,任何应用程序都可以启动另一个应用程序的组件。例如,许多应用程序会启动相机来拍照。这具有巨大的影响,开发者不必每次都重新发明轮子;相反,开发者可以简单地启动另一个应用程序的Activity。当应用程序完成时,结果会被返回并准备好使用。

摘要

希望本文为您提供了足够的信息,使您对Android开发产生兴趣,并简要解释了Android架构和应用程序组件。

希望您喜欢这篇文章,如果您有任何问题,请留言。

© . All rights reserved.