1.2 任务二:走进Android
【任务描述】
Anne:Andrew,你做Android开发也有一段时间了,你知道Android名字和Logo的由来吗?
Andrew:你这样一问真的把我问到了,我只知道Android是基于Linux的开发源代码的操作系统。早期是由Andy Rubin等人创建的Android团队,后来被Google收购,Andy Rubin成为了Google公司工程部副总裁,继续负责Android项目。之后,Google以Apache免费开源许可证的授权方式,发布了Android的源代码。
Anne:不错嘛,知道的不少!但是我还要给你普及一下Android的前世今生!
1.2.1 Android发展历程
Android一词最早出现在法国作家利尔亚当在1886年发表的科幻小说《未来夏娃》中,作者将外表像人类的机器起名为Android,这就是Android小人名字的由来。Android的Logo由Ascender公司设计,诞生于2010年,其设计灵感源于卫生间门上的图形符号,在灵感的启发下,设计师布洛克绘制了一个简单的机器人,它的躯干就像锡罐的形状,头上还有两根天线,Android小机器人从此诞生了。接下来,我们再来看一下Android系统的发展历程。正如Andrew所说,Android系统一开始并不是由谷歌研发出来的。
2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。
2005年8月17日,Google收购了成立仅22个月的Android公司及其团队。Andy Rubin成为Google公司工程部副总裁,继续负责Android项目。
2007年11月5日,谷歌公司正式向外界展示了一款名为Android的操作系统,并且在这天宣布成立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商以及芯片制造商共同组成,并与84家硬件制造商、软件开发商及电信营运商组成开放手持设备联盟(Open Handset Alliance)来共同研发改良Android系统,这一联盟将支持Google发布的手机操作系统以及应用软件,同时Google以Apache免费开源许可证的授权方式,发布了Android的源代码。
2008年,在Google I/O大会上,Google提出了Android HAL架构图。同年8月18日,Android获得了美国联邦通信委员会(FCC)的批准。
2009年4月,Google正式推出了Android1.5操作系统,它被命名为Cupcak(e 纸杯蛋糕)。
2009年9月,Google发布了Android 1.6操作系统,它被命名为Donut(甜甜圈),并且推出了搭载Android1.6操作系统的手机,凭借着出色的外观设计以及全新的Android 1.6操作系统,它成为当时全球最受欢迎的手机。
2010年2月,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树(staging tree)”上除去。同年5月,Google正式发布了Android2.2操作系统,它被命名为Froyo(冻酸奶)。
2010年10月,Google宣布Android系统在应用市场上获得官方数字认证的Android应用数量已经达到了10万个,应用数量的增长非常迅速。同年12月,Google正式发布了Android 2.3操作系统,它被命名为Gingerbread(姜饼)。
2011年1月,Google称Android设备的每日新用户数量达到了30万部,到2011年7月,这个数字增长到55万部。持有Android系统设备的用户总数已达到了1.35亿。
2011年8月2日,Android手机已占据全球智能机市场48%的份额。
2011年9月,Android系统的应用数量已经达到了48万个。在智能手机市场,Android系统的占有率已经达到了43%。同年Google发布其全新的Android 4.0操作系统,它被命名为Ice Cream Sandwich(冰激凌三明治)。
2012年1月6日,Google Android Market(应用程序商店)已有超过40万的应用,大多数的应用程序为免费。
2013年11月1日,Android 4.4操作系统正式发布,其在功能和UI上做了很大改进。它新的操作系统更加时尚美观,它被命名为KitKat(奇巧)。
2014年6月26日,在Google I/O开发者大会上,Google正式推出了Android 5.1操作系统,这款系统是Android问世以来最大的升级,其在UI和性能上给用户以全新的体验,这款操作系统被命名为lollipop(棒棒糖)。
2015年,在Google I/O大会议上,代号为Marshmallow(棉花糖)的Android 6.0系统正式推出。新操作系统在设备的续航能力上有了很大地提升。
2016年5月19日,在美国加州举办的Google I/O开发者大会上,Google发布了Android N平台,也就是Android7.X版本,并正式命名为Nougat(牛轧糖)。它主要在运行时和图形处理上做了更新,软件运行效率提升了3~5倍,并且引入了全新的JIT编译器,使得App安装速度提升了75%,编译代码的规模减少了50%。
2017年8月21日,Google在纽约向全球同步直播日全食以及AndroidO 发布会,也就是Android8.0版本,并正式命名为Oreo(奥利奥)。Android O 的升级主要在以下两个方面。
①更流畅体验:画中画功能;Notifi cation Dots,单击小红点显示通知信息;Autofi ll,更智能的智能填表;智能文本选择,双击自动文本选取。
②核心性能优化:安全升级,加入Google Play Protect界面;系统优化,启动速度加速两倍;电量管理,更严格地管控后台运行软件。
【自主学习】
请利用互联网资源,了解Android系统发布的正式版本有哪些?
1.2.2 Android系统架构
Android系统架构和其操作系统一样,采用了分层的架构。如图1-9所示,Android系统分为四层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
图1-9 Android系统架构图
1.应用程序层
从图1-9中我们可以看出,Android应用程序层包含了许多应用程序。例如,短信、联系人、电话、电子邮件、浏览器等。同时,开发人员也可以利用Java语言设计和编写属于自己的应用程序。相比其他手机操作系统,显得更加灵活和个性化。
2.应用程序框架层
应用程序框架层是Android开发的基础,为应用程序层提供了各种所能用到的API,很多核心应用程序也是通过这些API来实现的。由于其内部的组件重用机制,开发人员可以直接使用其提供的组件来快速地进行应用程序的开发,也可以通过继承来实现个性化的拓展。
在应用层中,各个部分行使着如下的功能。
Activity Manager(活动管理器):管理各个应用程序的生命周期以及通常的导航回退功能。
Window Manager(窗口管理器):管理所有的窗口程序。
Content Provider(内容提供器):使得不同应用程序之间存取或者分享数据。
View System(视图系统):构建应用程序的基本组件。
Notifi cation Manager(通告管理器):使得应用程序可以在状态栏中显示自定义的提示信息。
Package Manager(包管理器):Android系统内的程序管理。
Telephony Manager(电话管理器):管理所有的移动设备功能。
Resource Manager(资源管理器):提供应用程序使用的各种非代码资源,如本地化字符串、图片、布局文件、颜色文件等。
Location Manager(位置管理器):提供位置服务。
XMPP Service(XMPP服务):提供GoogleTalk服务。
3.系统运行库层
系统运行库层包括系统库和Android Runtime。系统库是应用程序框架的支撑,是连接应用程序框架层与Linux内核层的重要纽带。程序在Android Runtime中执行,其运行时分为核心库和Dalvik虚拟机两部分。
在系统运行层中,各个部分的作用如下。
Surface Manager:执行多个应用程序时,其负责管理显示与存取操作间的互动,另外也负责2D绘图与3D绘图进行显示合成。
Media Framework:多媒体库,基于PacketVideo OpenCore;支持多种常用的音频、视频格式录制和回放,编码格式包括MPEG4、MP3、H.264、AAC、ARM。
SQLite:小型的关系型数据库引擎。
OpenGL ES:根据OpenGLES 1.0API标准实现的3D绘图函数库。
FreeType:提供点阵字与向量字的描绘与显示。
WebKit:一套网页浏览器的软件引擎。
SGL:底层的2D图形渲染引擎。
SSL:在Andorid的通信过程中实现握手。
Libc:从BSD继承来的标准C系统函数库,专门为基于embedded linux的设备定制。
核心库:核心库提供了Java语言API中的大多数功能,同时也包含了Android的一些核心API,如android.os、android.net、android.media等。
Dalvik虚拟机:Dalvik虚拟机是一种基于寄存器的Java虚拟机。每个Android应用程序都有一个专有的进程,并且不是多个程序运行在一个虚拟机中,而是每个Android程序都有一个Dalivik虚拟机的实例,并在该实例中执行。
4.Linux内核层
Android操作系统是基于Linux内核,其核心系统服务如安全性、内存管理、进程管理、网路协议以及驱动模型都依赖于Linux内核。Linux Kernel也作为硬件和软件之间的抽象层,它隐藏了具体硬件细节并为上层提供统一的服务。
1.2.3 Android应用组件
Android开发四大组件分别是:活动(Activity),用于表现功能;服务(Service),用于后台运行服务,不提供界面呈现;广播接收器(Broadcast Receiver),用于接收广播;内容提供商(Content Provider),支持在多个应用中存储和读取数据,相当于数据库。
1.Activity
一个Activity通常展现为一个可视化的用户界面,它是Android程序与用户交互的窗口,也是Android组件中最基本也是最复杂的一个组件。从视觉效果来看,一个Activity占据当前的窗口,响应所有窗口事件,其具备控件,菜单等界面元素。从内部逻辑来看,Activity需要为了保持各个界面状态,做很多持久化的事情,还需要妥善管理生命周期和一些转跳逻辑。对于开发者而言,需要派生一个Activity的子类,进而进行编码实现各种功能方法。一般一个Android应用是由多个Activity组成的,Activity之间通过Intent进行通信。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。Android应用中每一个Activity都必须要在AndroidManifest.xml配置文件中声明,否则系统将不识别也不执行该Activity。
2.Service
一个Service 是一段长生命周期且没有用户界面的程序,只能后台运行,并且可以和其他组件进行交互,它可以用来开发如监控类程序。
我们以音乐播放器为例。当你打开其他应用的时候,音乐还在后台播放。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service运行结束。另外,我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动它)。当连接到一个service 之后,我们可以通过service提供的接口与它进行通信。
服务不能自己运行,它需要通过Contex.startService()或Contex.bindService()启动服务。同Activity一样,Service 也必须要在AndroidManifest.xml配置文件中注册。
3.Broadcast Receiver
广播是一种被广泛运用在应用程序之间传输信息的机制,而 Broadcast Receiver 是对发送出来的广播进行过滤接收并响应的一类组件。广播接收器没有用户界面,但它们可以启动一个activity或service来响应它们收到的信息,或者用Notifi cationManager 来通知用户。通知可以用多种方式来吸引用户的注意力——闪动背灯、震动、播放声音等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。Broadcast Receiver既可以在AndroidManifest.xml 中注册,也可以在运行时的代码中使用registerReceiver()进行注册。
广播分为:普通广播(Normal Broadcast)、系统广播(System Broadcast)、有序广播(Ordered Broadcast)、粘性广播(Sticky Broadcast)、App应用内广播(Local Broadcast)。
4.Content Provider
内容提供者,作为应用程序之间唯一的共享数据途径,Content Provider主要的功能就是存储并检索数据以及向其他应用程序提供访问数据的接口。在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都不允许其他应用直接访问。但是可以通过ContentResolver类从该内容提供者中获取或存入数据。
ContentProvider使用URI来唯一标识其数据集,这里的URI以content://作为前缀,表示该数据由Content Provider来管理。Content Provider使用时也必须要在AndroidManifest.xml配置文件中注册。
Android四大组件中,除了Content Provider是通过Content Resolver激活外,其他3种组件Activity、Service和Broadcast Receiver都是由Intent异步消息激活的。Intent在不同的组件之间传递消息,将一个组件的请求意图传给另一个组件。因此,Intent是包含具体请求信息的对象。针对不同的组件,Intent所包含的消息内容有所不同,不同组件的激活方式也不同,不同类型组件传递Intent的方式更不同。Intent是一种运行时绑定(runtime binding)机制,它能够在程序运行过程中连接两个不同的组件。
【想一想】
Android四大组件有什么相同点和不同点呢?
1.2.4 Android平台优势
Android操作系统发展到今天,已经成为全球用户数量最多、覆盖领域最广的手持设备操作系统,其飞速发展也得益于以固有的特性和优势。
1.开放性、开源、免费、可定制
Android最大的优势就是它的开放性,开放的平台吸引着越来越多的开发者,开源的代码库、免费的开发软件、社区、第三方开源共享,在带来巨大竞争的同时也使得Android在开放的平台中显得日益成熟。
2.运营商对网络的发展
网络的不断发展带来了更多强大的用户体验。
3.更加丰富的硬件选择
由于Android的开放性,很多厂商为了吸引用户,会在Android系统的基础上加以改造,推出功能特色各具的产品,而同时不会影响到数据同步、甚至软件的兼容,用户体验也不断丰富。
4.软件开发中的不受限制
由于Android的开放性使得第三方开发商可以自由地开发需要的软件,众多的开源代码库也使得开发变得更加简单方便,软件的功能也是不断地推陈出新、不断地强大。也使得Android的软件在应用市场中占据着一定的份额。
5.无缝结合的Google应用
Android手机可以无缝结合Google推出的其他服务,如地图、邮件、搜索等,Android也可以通过第三方应用平台支持与其他应用的结合,如:高德地图、百度地图等。
1.2.5 任务回顾
知识点总结
1.Android的发展历程。
2.Android的系统架构。
3.Android系统四大组件。
4.Android平台的优势。
学习足迹
图1-10所示为任务二的学习足迹。
图1-10 任务二学习足迹
思考与练习
1.Android的系统版本有哪些?它们分别被命名为什么?
2.Android的系统架构分为哪几层?
3.Android的四大组件是哪几个?
4.浅谈Android平台的优势有哪些?