- Android开发与实战
- 赵书兰编著
- 8068字
- 2020-08-28 23:32:46
1.2 Android简介
Android一词的本义是“机器人”,同时也是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。
1.2.1 Android发展史
2003年10月,Andy Rubin等人创建Android公司,并组建Android团队。
2005年8月17日,谷歌低调收购了成立仅22个月的高科技企业Android及其团队。安迪鲁宾成为谷歌公司工程部副总裁,继续负责Android项目。
2007年11月5日,谷歌正式向外界展示了这款名为Android的操作系统,并且在当天谷歌宣布建立一个全球性的联盟组织,该组织由34家手机制造商、软件开发商、电信运营商及芯片制造商共同组成。这一联盟将支持谷歌发布的手机操作系统及应用软件,将共同开发Android系统的开放源代码。
2008年
5月28日,Patrick Brady于谷歌I/O大会上提出Android HAL架构图。
8月18日,Android获得美国联邦通信委员会的批准。
9月22日,谷歌正式对外发布第一款Android手机——HTC G1(HTC dream)。
9月23日,谷歌发布Android 1.0。
9月24日,全球业界都表示不看好Android操作系统,并且声称最多1年,Android就会被谷歌关闭。
2009年
4月30日,Android 1.5正式发布。
5月10日,HTC G1和HTC G2市场大卖,成为仅次于iPhone的热门机型。
9月25日,Android 1.6正式发布。
9月29日,HTC Hero G3广受欢迎,成为全球最受欢迎的机型。
10月28日,Android 2.0智能手机操作系统正式发布。
11月10日,由于Android销售火热,Android平台出现第一个恶意间谍软件:Mobile Spy。
2010年
1月7日,谷歌发布了旗下第一款自主品牌手机:Nexus one(HTC G5)。
2月3日,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”上除去。
5月19日,谷歌正式对外发布Android 2.2智能操作系统。
5月20日,谷歌对外正式展示了搭载Android系统的智能电视——Google TV,该电视为全球首台智能电视。
7月1日,谷歌宣布正式与雅虎、亚马逊合作,并且在Android上推出了多项Kindle服务和雅虎服务。
7月9日,美国NDP集团调查显示,Android系统已占据了美国手机市场28%的份额,以及全球17%的市场份额。
8月12日,Android平台出现第一个木马病毒:Trojan-SMS.AndroidOS.FakePlayer.a。9月,Android应用数量超过9万个。
9月21日,谷歌对外公布数据,每日销售的Android设备用户数达到20万台。
10月26日,谷歌宣布Android达到第一个里程碑——电子市场上Android应用数量达到10万个。
12月7日,谷歌正式发布Android 2.3操作系统。
2011年
1月,谷歌对外宣布Android Market上的应用数量超过20万个。
1月,谷歌对外公布数据,每日销售的Android设备数达到了30万台。
2月,美国移动用户中36%拥有智能手机。当中,48%的智能手机用户选择Android智能手机。约32.1%的智能手机用户选择了苹果iPhone。黑莓及其他智能手机占有11.6%的份额。
2月2日,Android 3.0正式发布。
2月3日,谷歌发布了专用于平板电脑的Android 3.0蜂巢系统。
6月,Android在日本的智能手机操作系统市场占有率达到57%。
7月,Android在欧洲的智能手机操作系统市场占有率达到了22.3%。
7月,谷歌对外公布数据,Android每天的新用户达到55万人,Android设备用户总数达1.35亿台。
8月,谷歌收购摩托罗拉移动。
8月,谷歌对外宣布Android Market上的应用数量超过30万个。
8月2日,Android手机已占据全球智能机市场48%的份额,并在亚太地区市场占据统治地位,终结了Symbian(塞班系统)的霸主地位,跃居全球第一。
8月,Android在韩国的智能手机操作系统市场占有率达到了95%。
8月,Android系统在35个国家市场占有率第一,平均市场占有率达到48%。
8月,Android系统成为亚太地区第一大系统,市场占有率为亚太地区第一。
9月,Android在美国的智能手机操作系统市场占有率达到43%。
10月19日,谷歌正式发布Android 4.0操作系统。
11月,Android Market上提交审核的应用程序数量达到50万个。
11月初,谷歌对Android Market上的应用程序进行了大清理,据统计,此次共清理了约18万个应用程序,包括流氓应用、病毒软件、侵犯版权、低质量和滥竽充数的各种程序,谷歌将这一系列应用删除后,使得Android市场中的优质应用程序总数到31.5万个。
11月15日,Android在中国大陆的智能手机操作系统市场占有率达到了58%。
11月20日,谷歌宣布启动了Android Market应用审核、取缔、清扫行为,定期对电子市场上存在的不合格、低质量、违法恶意的应用程序进行清理。
11月18日,美国NPD数据显示,Android和iOS平台上的游戏占有率都首度超过任天堂的DS掌机和索尼的PSP掌机,手机游戏玩家也超过了掌机玩家,游戏开发商更倾向于在Android和iOS手机上开发游戏。
11月18日,谷歌报告显示,通过谷歌服务器激活的Android设备用户总数已经超过2亿台,每天激活的新设备用户数超过55万台,而这仅仅是通过谷歌服务器激活的用户设备数。12月9日,谷歌对外宣布,Android Market的累计下载量已经突破100亿次,平均每月的下载量为10亿次。
12月18日,谷歌移动事业部副总裁Andy Rubin表示,每天激活的Android设备已达到70万台。
12月26日,Andy Rubin通过Twitter宣布,圣诞节的前两天24日和25日,共有370万台Android设备被激活。
2012年
1月4日,数据显示,Android Market上的应用程序数量突破40万个,每4个月增加10万个应用程序。
1月5日,数据显示,在Android Market上登记的Android开发者已经达到了10万名。1月20日,谷歌报告显示,通过谷歌服务器激活的Android设备用户总数已经超过2.5亿台,距离去年11月,在短短2个月时间内全球共卖出5000万台Andriod设备,平均每秒钟就卖出10台Andriod设备。
2月4日,comScore等数据市场研究机构的数据显示,Andriod在美国手机市场的占有率达到了47.3%。
2月5日,美国联邦政府宣布成立专门的Android实验室进行适用于军方的Android第三方ROM的定制工作。
2月15日,美国联邦政府总务署宣布已经采购了2万台Android手机供政府人员使用。2月22日,Android在中国大陆的智能手机操作系统市场占有率达到了68.4%。
2月28日,谷歌正式宣布,Android设备每天激活量达到85万台,通过谷歌服务器激活的Android设备用户总数突破3亿台。
2月28日,谷歌官方数据显示,Android Market上的应用程序数量已经突破45万个,一年内增加了30万个。
3月1日,谷歌对外宣布,Android Market的累计下载量已经突破130亿次。
3月4日,Android在印度的智能手机操作系统市场占有率达到了34%。
4月4日,Android在美国市场的占有率增长到50.1%。
5月1日,Android在东南亚各国的平均份额达到了49%。
5月31日,Android 4.04更新。
6月2日,Android 4.0系统目前已经有7.1%的(Android系统)用户。
6月13日,Android在意大利的市场占有率增至47.4%。西班牙增为78.4%,在英国的市场份额增为52.5%,在德国的市场份额增为68.6%,法国增为56%。
6月14日,过去一年,Android手机在欧洲国家的销量暴增1580%,在欧洲的市场份额达到60%。
6月15日,Android在全球的市场份额达到59%,领先于竞争对手苹果Mac OSX的23%和微软Windows Phone的2.2%。
6月28日,北京时间0:30在谷歌I/O大会上发布了Android 4.1 Jellybean系统。7月10日,Android开源项目技术负责人Jean-Baptiste M. Queru在谷歌论坛宣布谷歌发布Android 4.1(果冻豆)系统的源代码。
7月20日,国际刑事警察组织(国际刑警)宣布推出假货监察器程序,该程序能帮助国际刑警通过摄像头获取货物编号来监察出入境的货物是否为假货,该程序只支持Android系统。
9月12日消息,据国外媒体报道,市场研究公司IHS今天发表报告称,2013年Android手机累积销量将达到11亿部。
10月30日,Android 4.2沿用“果冻豆”这一名称,以反映这种最新操作系统与Android 4.1的相似性。
Android 5.0将是下一代Android操作系统,2012谷歌I/O大会在旧金山召开,谷歌宣布推出Android 4.1操作系统,代号为Jelly Bean(果冻豆),并推出了全球首款搭载Android 4.1的Nexus 7平板。而在此之前,Jelly Bean(果冻豆)曾一度被认为是Android 5.0的代号。目前传言的Android 5.0的代号为Key Lime Pie(酸橙派)。
2013年
谷歌执行董事长埃里克·施密特在一场科技大会上预测:在2013年底前,全球安卓手机使用量将突破10亿台。他介绍说,目前每天激活的Andriod设备已达150万台。按当前的发展速度计算,预计6~9个月内Android智能手机全球使用量就会突破10亿台,在一两年内达到近20亿台。
1.2.2 Android特性
Android号称是首个为移动终端打造的真正开放和完整的移动平台,是安全开源免费的操作系统,任何人都可以获得和使用Android系统。谷歌公司还提供了Android SDK,包括了进行Android应用开发所必需的工具和API接口。
1.Android的特性
● 灵活的应用程序框架,可以随意重复使用或者替换手机的组件。
● 提供了专为移动设备优化的虚拟机——Dalvik虚拟机。
● 拥有内部集成的浏览器——基于开源的WebKit引擎。
● 提供针对手机优化的图形库,包括定制的2D图形库和基于OpenGL ES 1.0的3D图形库。
● 使用集成了轻量级数据库管理系统SQLite作为结构化的数据存储。
● 娱乐功能丰富,支持多种媒体格式。
● 支持多种移动电话技术,如GSM、WCDM等。
● 支持USB、蓝牙、Wi-Fi等多种数据传输。
● 支持摄像头、GPS、光线传感器、加速传感器、温度传感器等多种传感器。
● 提供了丰富的开发工具,其中包括设备模拟器、调试工具、内存及性能分析图表和Eclipse集成开发环境插件等。
目前Android系统不但应用于智能手机,也在平板电脑市场急速扩张。2011年年初数据显示,正式上市仅两年多的操作系统Android已经超越称霸10年的Symbian系统,并跃居全球最受欢迎的智能手机平台。
2.Android的优势
1)开放性
在优势方面,首先就是Android平台的开发性,其开发平台允许任何移动终端厂商加入到Android联盟中来。显著的开放性可以使其拥有更多的开发者,随着用户和应用的日益丰富,一个崭新的平台也将很快走向成熟。
开发性对于Android的发展而言,有利于积累人气,这里的人气包括消费者和厂商,而对于消费者来讲,最大的受益正是丰富的软件资源。开放的平台也会带来更多竞争,如此一来,消费者将可以用更低的价位购得心仪的手机。
2)挣脱运营商的束缚
在过去很长的一段时间,特别是在欧美地区,手机应用往往受到运营商的制约,使用什么功能接入什么网络,几乎都受到运营商的控制。iPhone上市后,用户可以更加方便地连接网络,运营商的制约相应减少。随着EDGE、HSDPA这些2G至3G移动网络的逐步过渡和提升,手机随意接入网络已不是运营商口中的笑谈,当你可以通过手机IM软件方便地进行即时聊天时,再回想不久前天价的彩信和图铃下载业务,是不是像噩梦一样?
互联网巨头谷歌推动的Android终端天生就有网络特色,将让用户离互联网更近。
3)丰富的硬件选择
丰富的硬件选择与Android平台的开放性相关,由于Android的开放性,众多的厂商会推出千奇百怪、功能各异的多种产品。功能上的差异和特色,却不会影响到数据同步、甚至软件的兼容,好比你从诺基亚Symbian风格手机一下改用苹果iPhone,同时还可将Symbian中优秀的软件带到iPhone上使用,联系人等资料更是可以瞬间转移,是不是非常方便呢?
4)不受任何限制的开发商
Android平台提供给第三方开发商一个十分宽泛、自由的环境,不会受到各种条条框框的阻扰,可想而知,会有多少新颖别致的软件诞生。但也有其两面性,血腥、暴力、情色方面的程序和游戏如何控制正是留给Android的难题之一。
5)无缝结合的谷歌应用
如今叱咤互联网的谷歌已经走过10年,从搜索巨人到全面的互联网渗透,谷歌服务如地图、邮件、搜索等已经成为连接用户和互联网的重要纽带,而Android平台手机将无缝接合这些优秀的谷歌服务。
3.Android的不足
当然,“金无足赤”,相对于其他一些智能手机操作系统而言,由于进入市场时间不长,作为后起之秀的Android在现阶段也存在着以下一些不足。
1)安全和隐私
由于手机与互联网的紧密联系,个人隐私很难得到保护。除了上网过程留下的个人足迹,谷歌这个巨人也时刻站在你的身后,洞穿一切,因此,互联网的深入将会带来新一轮的隐私危机。
2)首先开卖Android手机的不是最大运营商
众所周知,T-Mobile在美国纽约发布了Android首款手机G1。但是在北美市场,最大的两家运营商是AT&T和Verizon,而目前所知取得Android手机销售权的仅有T-Mobile和Sprint,其中T-Mobile的3G网络相对于其他三家也要逊色不少,因此,用户可以购买G1,但能否体验到最佳的3G网络服务则要另当别论。
3)运营商仍然能够影响Android手机
在国内市场,不少用户对移动定制机不满,感觉所购的手机像被人涂画了广告一般。这样的情况在国外市场同样出现。Android手机的另一发售运营商Sprint就在定制机型中内置了其手机商店程序。
4)同类机型用户减少
不少手机论坛都会有针对某一型号的子论坛,交流某款手机的使用心得,并分享软件资源。而对于Android平台手机,由于厂商丰富,产品类型多样,这样使用同一款机型的用户越来越少,缺少统一机型的程序强化。
5)过分依赖开发商,缺少标准配置
在使用PC端的Windows XP系统的时候,都会内置微软Windows Media Player这样一个浏览器程序,用户可以选择更多样的播放器,如Realplay或暴风影音等。但入手开始使用默认的程序同样可以应付多样的需要。在Android平台中,由于其开放性,软件更多依赖第三方厂商,例如,Android系统的SDK中就没有内置音乐播放器,全部依赖第三方开发,缺少了产品的统一性。
1.2.3 Android系统架构
Android系统是以Linux系统为基础的,谷歌将其按照功能特性划分为4层,自下而上分别是Linux内核、中间件、应用程序框架和应用程序,如图1-1所示。
图1-1 Android系统框架图
1.应用程序
Android系统内置了一些常用的应用程序,包括Home视图、联系人、电话、浏览器等。这些应用程序和用户自己编写的应用程序是完全并列的,同样都是采用Java语言编写的。而且,用户可以根据需要增加自己的应用程序,或者替换系统自带的应用程序。
2.应用程序框架
应用程序框架提供了程序开发人员的接口,这是与Android程序员直接相关的部分。开发者可以用它开发应用,其中包括以下几方面。
● 丰富而又可扩展的视图(Views):可以用来构建应用程序,它包括列表(lists)、网格(grids)、文本框(text boxes)、按钮(buttons),甚至可嵌入的Web浏览器。
● 内容提供器(Content Providers):使得应用程序可以访问另一个应用程序的数据(如联系人数据库),或者共享它们自己的数据。
● 资源管理器(Resource Manager):提供非代码资源的访问,如本地字符串、图形、布局文件(layoutfiles)。
● 通知管理器(Notification Manager):使得应用程序可以在状态栏中显示自定义的提示信息。
● 活动管理器(Activity Manager):用来管理应用程序生命周期并提供常用的导航回退功能。
3.中间件
中间件包括两部分:核心库(libraries)和Android运行时环境(Android runtime)。
1)核心库
核心库中主要包括一些C/C++核心库,方便开发者进行应用的开发。
● 系统C库(libc):专门为基于embedded Linux的设备定制的。
● 媒体库:支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式包括MPEG4、H.264、MP3、AAC、AMR、JPG、PNG。
● SurfaceManager:对显示子系统的管理,并且为多个应用程序提供了2D和3D图层的无缝融合。
● WebKit/LibWebCore:Web浏览引擎,支持Android浏览器和一个可嵌入的Web视图。
● SGL:底层的2D图形引擎。
● 3D libraries:基于OpenGL ES 1.0 APIs实现的3D引擎。
● FreeType:位图(bitmap)和矢量(vector)字体显示。
● SQLite:轻型关系型数据库引擎。
2)Android运行时环境
● 运行时核心库:提供了Java库的大多数功能。
● Dalvik虚拟机:依赖于Linux内核的一些功能,如线程机制和底层内存管理机制。同时虚拟机是基于寄存器的,Dalvik采用简练、高效的byte code格式运行,它能够在低资耗和没有应用相互干扰的情况下并行执行多个应用,每一个Android应用程序都在它自己的进程中运行,都拥有一个独立的Dalvik虚拟机实例。Dalvik虚拟机中可执行文件为.dex文件,该格式文件针对小内存使用做了优化。所有的类都经由Java编译器编译,然后通过SDK中的“dx”工具转化成.dex格式由虚拟机执行。
4.Linux内核
Android平台运行在Linux 2.6之上,其Linux内核部分相当于手机硬件层和软件层之间的一个抽象层。Android的内核提供了显示驱动、摄像头驱动、闪存驱动、键盘驱动、Wi-Fi驱动、音频驱动和电源管理等多项功能。此外,Android为了让Android程序可以用于商业目的,将Linux系统中受GNU协议约束的部分进行了取代。
1.2.4 Android组件
Android开发有四大组件。
● 活动(Activity):用于表现功能。
● 服务(Service):后台运行服务,不提供界面呈现。
● 广播接收器(Broadcast Receiver):用于接收广播。
● 内容提供商(Content Provider):支持在多个应用中存储和读取数据,相当于数据库。
1.Activity
Activity活动程序是Android系统中最常用,也是最基本的工作组件。直观上来说,Activity活动程序相当于用户看到的手机界面。用户程序的每一个界面即为一个Activity,用户通过Activity来与应用程序进行交互。Activity通过视图View显示用户,视图View将用户的操作信息反馈给Activity来执行,如图1-2所示。
图1-2 Activity活动程序
一个Android应用程序可包含一个或多个Activity,每个Activity都是独立的。一般来说,Android程序在运行时会将其中一个Activity定为第一个显示的Activity。在程序运行过程中,Activity之间的跳转是通过Intent激活组件来完成的。Intent激活组件负责完成Activity之间的切换和数据传递。
Android四种Activity加载模流程图如图1-3所示。
图1-3 Android四种Activity加载模流程图
Activity活动程序在Android系统中具有不同的状态,这些状态构成了Activity的生命周期。
2.Service
Service是Android系统中的一种组件,与Activity的级别差不多,但是它不能自己运行,只能在后台运行,并且可以和其他组件进行交互。Service是没有界面的长生命周期的代码。Service是一种程序,它可以运行很长时间,但是它却没有用户界面。例如,打开一个音乐播放器的程序,这个时候若想上网,那么打开Android浏览器,虽然已经进入了浏览器程序,但歌曲播放并没有停止,而是在后台继续一首接一首地播放。其实这个播放就是由播放音乐的Service控制的。当然这个播放音乐的Service也可以停止,例如,当播放列表里的歌曲播放完毕,或者用户按下了停止音乐播放的快捷键等。Service可以在很多场合的应用中使用,例如,播放多媒体的时候用户启动了其他Activity,此时程序要在后台继续播放;再如,检测SD卡上文件的变化,或者在后台记录用户地理信息位置的改变,等等。总之,服务是隐藏在后台的。
开启Service有两种方式。
● Context.startService():Service会经历onCreate→onStart(如果Service还没有运行,则Android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次);若使用stopService则直接调用onDestroy,如果是调用者自己直接退出而没有调用stopService,则Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。
注意:多次调用 Context.startservice()不会嵌套(即使会有相应的 onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),它都会被停止。
说明:传递给startService()的Intent对象会传递给onStart()方法。调用顺序为:onCreate →onStart(可多次调用)→onDestroy。
● Context.bindService():Service会经历onCreate()→onBind(),onBind将返回给客户端一个IBind接口实例,IBind允许客户端实施回调服务,比如得到Service运行的状态或其他操作。这个时候调用者(Context,如Activity)会和Service绑定在一起,Context退出了,Srevice就会调用onUnbind→onDestroyed相应退出。
3.Broadcast Receiver
Broadcast Receiver广播接收器负责接收Android系统中的广播通知信息,并做出相应的处理。当Android操作系统或某个应用程序发送广播时,另外的应用程序可以使用Broadcast Receiver广播接收器接收这个广播,并做出相应的处理。从此可看出,广播可以源自于Android系统,也可以来自于应用程序。
源自于Android系统的广播包括时区改变、电池电量低、更改语言选项等。来自应用程序的广播则可以是指定的功能状态,如数据下载完成后的通知。Android应用程序可以拥有任意数量的广播接收器。所有的接收器均继承自Broadcast Receiver基类。
广播接收器没有像Activity那样的可视化用户界面,但可以采用很多种方式来吸引用户的注意,如闪烁指示灯、震动、播放声音等。
Broadcast Receiver广播接收器需要注册和注销。Android提供了两种方式来注册广播接收器,一种是在Android Manifest.xml中定义,另一种是直接在程序代码中动态设置。注册好的广播接收器并不一直在后台运行,只有相应的Intent才可调用。
在使用时,应用程序首先将需要广播的信息封装在Intent中,然后将Intent广播出去,另一个应用程序则通过IntentFilter对象来过滤所有的Intent。最后,Broadcast Receiver广播接收器用另一个onReceive()的回调方式来处理接收到的通知。
4.Content Provider
Content Provider是Android提供的第三方应用数据的访问方案。
在Android中,对数据的保护是很严密的,除了放在SD卡中的数据,一个应用所持有的数据库、文件等内容,都是不允许直接访问的。Andorid当然不会真地把每个应用都做成一座孤岛,它为所有应用都准备了一扇窗,这就是Content Provider。应用想对外提供的数据,可以通过派生Content Provider类,封装成一枚Content Provider,每个Content Provider都用一个uri作为独立的标识,形如:content://com.xxxxx。所有东西看着像REST的样子,但实际上,它比REST更为灵活。和REST类似,uri也可以有两种类型,一种是带id的,另一种是列表的。但实现者不需要按照这个模式来做,给你id的uri也可以返回列表类型的数据,只要调用者明白,就无妨,不用苛求所谓的REST。
另外,Content Provider不和REST一样只有uri可用,还可以接受Projection,Selection,OrderBy等参数,这样,就可以像数据库那样进行投影、选择和排序。查询到的结果以Cursor的形式返回,调用者可以移动Cursor来访问各列的数据。
Content Provider屏蔽了内部数据的存储细节,向外提供了上述统一的接口模型,这样的抽象层次大大简化了上层应用的书写,也对数据的整合提供了更方便的途径。Content Provider内部常用数据库来实现,Android提供了强大的Sqlite支持,但很多时候,你也可以封装文件或其他混合的数据。
在Android中,Content Resolver是用来发起Content Provider的定位和访问的。不过它仅提供了同步访问的Content Provider的接口。但通常,Content Provider需要访问的可能是数据库等大数据源,速度上不能足够快,否则会导致调用线程的拥塞。因此Android提供了一个AsyncQueryHandler,帮助进行异步访问Content Provider。
在各大组件中,Service和Content Provider都需要持续访问。Service如果是一个耗时的场景,往往会提供异步访问的接口,而Content Provider不论效率如何,提供的都是约定的同步访问接口。